Automatizando seus projetos com o Maven 2

Artigo escrito pelo Mauricio Linhares. Leia em

http://www.guj.com.br/java.tutorial.artigo.185.1.guj

Parabéns Mauricio,

O artigo está bem didático e com bastante informações!

ASOBrasil

Vamo ver se agora o povo resolve utilizar o Maven de vez né :smiley:

muito bom o artigo …
e se você quiser usar o maven 2 em algum projeto ja existente que não pode mudar a estrtura de diretórios é só dar uma olhada aqui
(sim, eu sei que não é legal postar links para o proprio blog, mas achei que este era um bom complemento para este tutorial :smiley: )

Muito bom Urubatan, mas só pra reforçar um pouco mais, só altere os padrões se realmente não for possível usar o padrão ou migrar para o padrão.

Seguindo o padrão de diretórios a risca você só sai ganhando :smiley:

Em primeiro lugar gostaria de parabenizar o Maurício pelo tutorial! Sucinto e prático!

E depois algumas dúvidas… :slight_smile:

  • Pelo que eu entendi da documentção do Maven, o comando deploy, faz o deploy da aplicação em um servidor remoto com a estrutura de diretórios do Maven. Como vocês fariam para fazer o deploy diretamente para um servidor de homologação rodando um tomcat, por exemplo? Existe um plugin para isso?

  • Eu estava fazendo testes com o maven-proxy (http://maven-proxy.codehaus.org/) para ter um repositório remoto in site, evitando fazer com que todos os desenvolvedores fiquem fazendo downloads de dependencias da internet. Vocês teriam outra sugestão neste sentido? Vi que no tutorial foi utilizado um repositório local compartilhado na rede, mas essa solução estava onerando um pouco a rede e preferi manter os repositórios locais nas máquinas dos desenvolvedores…

[quote=mutano]
E depois algumas dúvidas… :slight_smile:

  • Pelo que eu entendi da documentção do Maven, o comando deploy, faz o deploy da aplicação em um servidor remoto com a estrutura de diretórios do Maven. Como vocês fariam para fazer o deploy diretamente para um servidor de homologação rodando um tomcat, por exemplo? Existe um plugin para isso?[/quote]

Só jogando lá em webapps não resolve não?

Você também pode usar o plugin do Tomcat pro Maven 2 -> http://mojo.codehaus.org/tomcat-maven-plugin/introduction.html

Rapaz, aqui agente não teve problema não, talvez porque não somos tantos programadores Java na empresa e a rede é relativamente rápida, nunca tinha pensado nessa possibilidade não :-o

Resolve sim, mas como fazer isso via comando do maven? Pode ser uma dúvida bem besta, mas ainda não descobri… eu estava resolvendo isso no maven 1.x via ant no arquivo maven.xml.

Resolve sim, mas como fazer isso via comando do maven? Pode ser uma dúvida bem besta, mas ainda não descobri… eu estava resolvendo isso no maven 1.x via ant no arquivo maven.xml.
[/quote]
acho que ai o negócio é usar o plugin do maven 2 para o app server que esta sendo utilizado, no caso do tomcat pode ser este http://www.codeczar.com/products/maven-tomcat-plugin/
se quiser algo mais genérico que suporte vários app servers pode dar uma olhada no Cargo

Senhores,

dei uma olhada no artigo e vou fazer alguns teste com o maven 2, o artigo deu uma motivada boa neste sentido, mas tenho algumas dúvidas que talvez vocês que já o utilizam possam me ajudar.

  1. podemos autenticar os usuários via ldap?
  2. Podemos acessar o repositório diretamente com as ferramentas: eclipse, netbeans, wincvs ou outro equivalente?
  3. Podem ser utilizados para gerenciar projetos desenvolvidos em outros ambientes como php e delphi?
  4. Tem como criar grupos e subgrupos, mais ou menos como a própria apache faz, existem os projetos principais e abaixo deles subprojetos, depois de um tempo estes subprojetos podem ser elevados para projeto principal?
  5. existe alguma ferramenta de administração via web para pessoas relativamente leigas possam fazer substituição de pessoas ou a criação de novos projetos?
  6. Tem como definir o nível de acesso pela web ao projeto, algo como: restrito ao subgrupo, restrito ao grupo, consulta aberta ou totalemnte aberto?

valeu pessoal e parabens pelo artigo.

Autenticar quais usuários?

Pode, o repositório é só uma pasta comum no sistema de arquivos.

Teoricamente, sim, mas você teria que criar plugins que fizessem isso.

Grupos e subgrupos existem por default no maven, mas não entendi essa história de “projeto ser elevado a principal”.

O Maven não cria projetos, ele ajuda a gerenciar e automatizar builds de projetos de software.

Não entendi.

Maurício,

vamos ao caso prático,

temos um curso de informática em nossa instituição, temos um servidor que mantém os trabalhos de conclusão de curso, mas estamos procurando uma solução em que os alunos não sejam usuários do sistema e precisamos manter um controle de versão para os projetos.
A solução que estamos procurando deve contemplar:

  • controle de grupos e usuários;
  • controle de acesso aos projetos, depois de atingir certa maturidade ele poderá se tornar publico;
  • controle de versão dos arquivos de documentação e do sistema propriamente dito;
  • fórum de discussão do projeto

valeu.

Tutorial muito bom, mas uma vez parabéns. Sempre publicando excelente tutoriais.

Vale uma dica, quem utiliza proxy ou proxy autenticado, deve configura-lo em: mavenDiretorio\conf\settings.xml , descomentando e modificando os valores em:

<proxy> <id>optional</id> <active>true</active> <protocol>http</protocol> <username>thiago</username> <password>xxxx </password> <host> ip </host> <port> porta </port> <nonProxyHosts>local.net,some.host.com</nonProxyHosts> </proxy>

Caso utilize proxy e NÃO configurar, quando for testar o mvn compiler:compile , como explicado no tutorial, vai gerar um erro parecido com o abaixo

quem estiver tentando rodar pela primeira vez e estiver dando erro
“[WARNING] repository metadata for: ‘org.apache.maven.plugins’ could not be retrieved from
repository: central due to an error: Error transferring file …”

perai que houve uma confusão …
o maven ajuda a gerenciar e automatizar os builds do projeto …
o que tu quer é um gerenciador de configuraçoes …
ou então um servidor de integração continua

Eu acho que essa será uma possível correção.
Página 5, código referente a inclusão de uma nova dependência, no caso o Hibernate diz que:

<dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate</artifactId>
      <version>3.1.3</version>
      <scope>test</scope>
      <type>jar</type>
</dependency>

Mas eu acho que Hibernate não é test.
Eu acho que ele é compile.

E aproveitando a possível discussão sobre , eu andei testando o provided que traz as dependências de um determinado provedor específico (Ex: Conteiner WEB). Testei com servlet-api.jar e não vi em nenhum momento ele relacionando isso com o Conteiner que eu estava usando.

Ajudai-me

Li o artigo e gostei.
Agora me surgiu algumas duvidas:

1 - Pessoal , usando o Maven eu optei pela sua arquitetura padrão. E gostei muito. Mas eu perco aqueles “formatos de package do eclipse”. Só uma dúvida.
Tudo agora é um Folder, eu sei que package é igual a Folder. Mas quero dizer aquela organização, ícones , etc…
Vide imagem anexada.

2 - Se eu iniciar um projeto novo, qual é a melhor forma de colocar os jar das API usadas? Ex: Comeco agora um projeto com o Mentawai, Ibatis , Spring.
Imaginamos que o Maven já tenha feito download dos jars em um projeto anterior.
Como faço para o meu projeto ter esse Jar desde do inicio?
Para um simples auto-complete.

3 - Eu gosto muito de baixar os Fontes e JavaDocs dos Frameworks / APIs usados em meus projetos.
Configuro-os como libraries do Eclipse e anexo seus fontes e Javadoc a cada a API/Framework. Enfim, isso me deixa acessar o Javadoc muito mais rápido e fonte. Me levando ao Javadoc/Código de um objeto do Framework ou da API usada.
Como Anexo os fontes e javadoc ao jar gerenciados pelo Maven 2?

Obrigado pela paciência , :stuck_out_tongue:
[]'s

configura o teu pom.xml com todas as dependencias, e depois digita:
mvn eclipse:eclipse

se o projeto for web
mvn -Dwtpversion=1.0 eclipse:eclipse

prontinho, projeto do eclipse configurado

Urubatan, digitei mvn eclipse:eclipse

Unbound classpath variable: 'M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar' in project ArtigoGuj

Configurei a minha variavel para a pasta do Maven2.

Name: M2_REPO Path: C:/Documents and Settings/Alex/.m2/repository

Sempre que colocar uma nova dependencia no pom.xml, eu faço mvn eclipse:eclipse?

[quote=afsrj]1 - Pessoal , usando o Maven eu optei pela sua arquitetura padrão. E gostei muito. Mas eu perco aqueles “formatos de package do eclipse”. Só uma dúvida.
Tudo agora é um Folder, eu sei que package é igual a Folder. Mas quero dizer aquela organização, ícones , etc…
Vide imagem anexada.[/quote]

Não precisam ser todos folders, basta que você esteja com o package explorer aberto, clique com o botão direito nas pastas “java” e “resources”, procure pela opção “Build Path” e depois clique em “Use as source folder”.

[quote=afsrj]2 - Se eu iniciar um projeto novo, qual é a melhor forma de colocar os jar das API usadas? Ex: Comeco agora um projeto com o Mentawai, Ibatis , Spring.
Imaginamos que o Maven já tenha feito download dos jars em um projeto anterior.
Como faço para o meu projeto ter esse Jar desde do inicio?
Para um simples auto-complete.[/quote]

É só declarar a dependência no seu pom.xml que ele adiciona ela automaticamente. Mas você precisa estar com o plugin do Maven 2 instalado no seu Eclipse.

[quote=afsrj]]3 - Eu gosto muito de baixar os Fontes e JavaDocs dos Frameworks / APIs usados em meus projetos.
Configuro-os como libraries do Eclipse e anexo seus fontes e Javadoc a cada a API/Framework. Enfim, isso me deixa acessar o Javadoc muito mais rápido e fonte. Me levando ao Javadoc/Código de um objeto do Framework ou da API usada.
Como Anexo os fontes e javadoc ao jar gerenciados pelo Maven 2?[/quote]

Você vai ter que gerar um JAR com os javadocs e os fontes pra que o plugin do Maven 2 para o Eclipse adicione eles automaticamente no seu build path. Os nomes dos arquivos devem ser iguais ao nome do jar normal mas antes da extensão tem que colocar “-sources” para o de código fonte e “-javadoc” para o de javadocs.

Os nomes ficariam assim:

hibernate-3.2.2.jar
hibernate-3.2.2-sources.jar
hibernate-3.2.2-javadoc.jar