Artigo escrito pelo Mauricio Linhares. Leia em
Automatizando seus projetos com o Maven 2
54 Respostas
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é 
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
)
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 
Em primeiro lugar gostaria de parabenizar o Maurício pelo tutorial! Sucinto e prático!
E depois algumas dúvidas… 
-
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…
E depois algumas dúvidas…![]()
- 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?
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.
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.
- podemos autenticar os usuários via ldap?
- Podemos acessar o repositório diretamente com as ferramentas: eclipse, netbeans, wincvs ou outro equivalente?
- Podem ser utilizados para gerenciar projetos desenvolvidos em outros ambientes como php e delphi?
- 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?
- 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?
- 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 , 
[]'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?
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.
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”.
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.
É 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.
]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?
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
Instalei o plugin, e resolve bem a sua tarefa.
Tem alguns bugs que é um saco!...
Achei um muito estranho, caso você já tenha um projeto usando o maven2, o plugin da erro ao tentar ler o pom.xml.
Testei usando o projeto do exemplo.
A unica coisa que ainda não testei são a inclusão dos fontes e dos javadocs.
Gostaria de chamar atenção para 2 coisas:
Veja a imagem abaixo.
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<inceptionYear>2006</inceptionYear>
<name>Aprendendo o Maven 2</name>
<scope>test</scope>
<build/>
<plugins/>
<plugin/>
<artifactId/>
<configuration/>
<source/>
<target/>
2) Seguindo a dica do Maurício, o mesmo pode ver o resultado.
src
|_ main
Fica como folder ainda, ou tem outra maneira?
[]'s

2) Seguindo a dica do Maurício, o mesmo pode ver o resultado.src
|_ main
Fica como folder ainda, ou tem outra maneira?
Essas pastas vão sempre ficar como folder, elas não contém código fonte, portanto não precisam ser tratadas como pastas de código fonte. Só as pastas que você adiciona ao build path vão ter um tratamento diferente, o que é o comportamento correto.
Na verdade a vantagem do plugin é não ter que ficar dando mvn eclipse:eclipse toda hora. Pra manipular o POM e adicionar dependências é melhor fazer na mão mesmo.
Uma outra limitação do plugin é com projetos web do WTP. O plugin não coloca os jars na pasta lib da aplicação então o Eclipse não faz deploy dos jars. Tem que ficar dando mvn war:inplace pro maven copiar os jars pro lib.
[]'s
Rodrigo Auler
Uma outra limitação do plugin é com projetos web do WTP. O plugin não coloca os jars na pasta lib da aplicação então o Eclipse não faz deploy dos jars. Tem que ficar dando mvn war:inplace pro maven copiar os jars pro lib.
Acho que o melhor mesmo é não usar o WTP e usar o plugin do Jetty pra rodar as aplicações web 
Pessoa, precisei instalar o eclipse novamente.
Instalei o plugins do Maven2 pelo site update, o plugins esta funcionando normalmente, porem nao me permite criar projeto usando marven igual na instalacao anterior do eclipse…
Sabem do que estou falando?
As outras funcionalidades funcionam normalmente, porem a mais interessante de montar as folder e package nao esta mais habilitada…
[]'s
Resolvido:
Eu estava baixando do repositório antigo que a versão esta somente até a .09
O repositório atual(0.10) segue abaixo:
Porque a maioria dos framework/api no repositório central do M2, estão desatualizados. Algumas Framework estão quase 1 ano desatualizada.
Alguns framework/api desatualizada:
Spring (2.0.2)
Ibatis (mais de 1 ano)
Não sei se com vocês acontece isso:
Veja meu pom.xml:
<dependency>
<groupId>struts</groupId>
<artifactId>struts</artifactId>
<version>1.2.9</version>
</dependency>
Eu juro que li no tutorial e em outros lugares que eu nao precisaria me preocupar com as dependências da minha dependência.
Exemplo escolhi o struts 1.2.9. E so veio o struts-core.jar.
As dependencias não vieram. Tais como:
struts-taglib.jar, struts-extras.jar , struts-el.jar , etc…
:twisted: :twisted: :twisted:
Acid-Tutorial, fritou meus neuronios.
Parabens Mauricio e todo mundo que contribue pelo GUJ e pela comunidade javanesa do brasil. =)
Estou iniciando no Maven e esse topico foi realmente muito util, valeu!!!
Hugs, 
Estou com uma dúvida, estou querendo adicionar EJB 3 em um projeto, mas eu não sei qual o Id do artefato.
Tem esso no repositorio, ou eu vou ter que colocar dentro do meu repositorio local??
Valeu, muito obrigado!!!
Qual EJB3?
Se você adicionar o EntityManager do Hibernate ele vai colocar o javax.persistence lá automaticamente.
Qual EJB3?Se você adicionar o EntityManager do Hibernate ele vai colocar o javax.persistence lá automaticamente.
Eu estava querendo colocar o Stateless Session Beans. Na hora que eu vou adicionar o @Stateless ele não encontra.
Ah, nesse caso aí só adicionado na mão mesmo eu acho.
Qual EJB3?Se você adicionar o EntityManager do Hibernate ele vai colocar o javax.persistence lá automaticamente.
Outra coisa, quando vc disse adicionar o EntityManeger do Hibernate, eu não deveria adicionar no pom.xml essa dependencia com o javax.persitence??
Valeu!!
Mas essa dependecia não precisa ficar explicida no pom.xml?
Eu teria que colocar no repositorio local esse jar se ele não estiver no remoto?
Ela vai ter que ser adicionada no POM, mas antes de adicionar ela você vai ter que colocar ela no repositório.
Saquei, nesse caso ele não vai ter remoto e eu teria que colocar local ou disponibilizar remoto para o projeto, valeu a força!!!
Não sei se com vocês acontece isso:
Veja meu pom.xml:<dependency> <groupId>struts</groupId> <artifactId>struts</artifactId> <version>1.2.9</version> </dependency>Eu juro que li no tutorial e em outros lugares que eu nao precisaria me preocupar com as dependências da minha dependência.
Exemplo escolhi o struts 1.2.9. E so veio o struts-core.jar.
As dependencias não vieram. Tais como:
struts-taglib.jar, struts-extras.jar , struts-el.jar , etc…
É que o struts-extra, e os demais, é que são dependentes do struts e não o contrário.
É por isso que ele chama extra. São coisas a mais que nem todo o mundo precisa. O que o maven tá trazendo pra você são as outras depdendências, jakarta-utils, etc…
Alguem aqui já conseguiu usar o Maven2 com a api commons-email.
Estou desde ontem tentando migrar um projeto pequeno que usei a commons-email.
E ele nao consegue baixar os JAR.
Segue o erro:
Segue meu pom.xml:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>commons-email</groupId>
<artifactId>commons-email</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>commons-email</groupId>
<artifactId>commons-email</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
Alguem aqui já conseguiu usar o Maven2 com a api commons-email.Estou desde ontem tentando migrar um projeto pequeno que usei a commons-email.
E ele nao consegue baixar os JAR.
Segue o erro:Segue meu pom.xml:
<project> <modelVersion>4.0.0</modelVersion> <groupId>commons-email</groupId> <artifactId>commons-email</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>commons-email</groupId> <artifactId>commons-email</artifactId> <version>1.0</version> </dependency> </dependencies> </project>
O seu POM diz que seu projeto chama commons-email. Quando você tenta importar o commons-email dá erro.
Você tem que escolher outro artifactId and groupId pro seu projeto. Deixe o commons-email só rpa dependence.
Alguem aqui já conseguiu usar o Maven2 com a api commons-email.Estou desde ontem tentando migrar um projeto pequeno que usei a commons-email.
E ele nao consegue baixar os JAR.
Segue o erro:Segue meu pom.xml:
<project> <modelVersion>4.0.0</modelVersion> <groupId>commons-email</groupId> <artifactId>commons-email</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>commons-email</groupId> <artifactId>commons-email</artifactId> <version>1.0</version> </dependency> </dependencies> </project>
O seu POM diz que o nome do seu projeto é commons-email. Quando você tenta importar o commons-email dá erro.
Você tem que escolher outro artifactId and groupId pro seu projeto. Deixe o commons-email só rpa dependence.
Alguem aqui já conseguiu usar o Maven2 com a api commons-email.Estou desde ontem tentando migrar um projeto pequeno que usei a commons-email.
E ele nao consegue baixar os JAR.
Segue o erro:Segue meu pom.xml:
<project> <modelVersion>4.0.0</modelVersion> <groupId>commons-email</groupId> <artifactId>commons-email</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>commons-email</groupId> <artifactId>commons-email</artifactId> <version>1.0</version> </dependency> </dependencies> </project>
O seu POM diz que o nome do seu projeto é commons-email. Quando você tenta importar o commons-email dá erro.
Você tem que escolher outro artifactId and groupId pro seu projeto. Deixe o commons-email só rpa dependence.
Opa Marcelo, segue os passos que eu fiz:
- Deletei o projeto antigo.
- Fui na pasta local do maven2 ( C:(…)\m2\repository ) e delete a pasta commons-emails.
- Criei outro projeto, veja o pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>TesteEmails</groupId>
<artifactId>TesteEmails</artifactId>
<version>0.0.1</version>
<dependencies>
<dependency>
<groupId>commons-email</groupId>
<artifactId>commons-email</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
- Pelo prompt de comando tento gerar o package,
mvn package. Neste momento é baixado o jar do commons-email,porém, da um erro de build-failed, segue o erro:
Vejam em:
http://blog.eteg.com.br/2008/12/eteg-lana-curso-de-maven-disponibiliza.html
um abraço,
Rodrigo
Opa… tópico sendo ressucitado…
Galera é o seguinte… 3 anos se passaram da criação do tópico e creio que o Maven só se consolidou nesse período, minha pergunta é…
Ainda é a melhor forma utilizar o maven da forma que está descrita no artigo ?? Ou utilizá-lo com um Hudson ou Continuum seria mais vantagem ?? Usar o maven com NetBeans vale a pena ?? Pois vejo bastante gente comentando somente do uso com o Eclipse e me preocupo quando não tem uma referência ao NB… hehehehe. Ví que ele tem um plugin de integração com o Hudson, conforme link http://www.contrib.netbeans.org/features/ide/build-tools_pt_BR.html , vale a pena usá-lo ? é no mínimo madura essa parceria Hudson + NetBeans + Maven ???
Eita… muita dúvida e pouca contribuição… hehehehe… mas é que como estamos começando com Java agora na empresa, queremos logo começar da forma correta.
Valews 
Adriano,
Estamos usando em nossa empresa a parceria que você citou, com bastante êxito, é show de bola mesmo. Ouvi falar que o Netbeans tem um plugin melhor que o do Eclipse, porém não posso comprovar, pois só uso o Netbeans.
Só um detalhe, o Hudson é uma ferramenta que se utiliza do maven, e não o contrário hein… elas tem finalidades distintas.
pow kotho, bacana cara, se tiver algum material pra ajudar, blz… Vamos trocar experiências aqui… Falows 
O Maven ainda é versão 2 ?este tuto ainda é de boa?
Isso é que eu chamo de tutorial de verdade!!! Parabéns
Parabéns pelo artigo Mauricio.
É possível criar um projeto Maven com archtype simples (ex. quickstart) e depois transformar este projeto em Dynamic Web Project?
Seria só adicionar a pasta webapp e o web.xml no WEB-INF?
Olá Pessoal, estou com um problema.
Estou em um projeto WEB que precisa ser modularizado.
E estive olhando alguns foruns e foi muito utilizado o empacotamento de jars e adicionado no mudulo principal.
so que estou tendo alguns problemas para empacotar o projeto web como JAR.
Ja que possui paginas xhtml e a pasta WEB-INF.
Quando eu utilizo o maven estes arquivos não são incluidos no arquivo jar.
em um tutorial que encontrei ofi abordado que estes arquivos deveria ficar dentro de meta-INF/resources.
alguem tem alguma ideia d como posso fazer isso?
valeu
Essa é a ultima atualização do maven??? ou apenas o tutorial msm???
=p
Não consigo ver o artigo parece que o link está quebrado
O artigo ta fora do ar =/ … Vê se conseguem repostar ele .