A algum tempo atraz eu escrevi este post, falando sobre o Maven 2.0.
Pois é, depois daquilo tropecei no mesmo problema que um monte de gente tropeça para usar o maven, ou seja, tenho projetos que por um motivo ou outro não quero ou não posso usar a estrutura de diretórios do maven …
Perguntei para um monte de gente (tah, podem ter sido só uns 5 ou 6) e todos disseram que quando usavam o maven usavam a estrutura de diretórios dele mesmo, então passei bastante tempo sem nem pensar em usar o tal do Maven 2.
Bom, voltando ao assunto, esta semana eu resolvi “perder” mais algumas horas estudando o tal do maven, o resultado foi que consegui utilizar todo o poder do Maven 2, em um projeto web com a estrutura padrão do eclipse.
E como eu fiz isto?
Bom, foi só olhar a documentação dos plugins do maven ![]()
Pois é, da outra vez perdi uns 3 dias e não li a porcaria do manual ![]()
Sim, culpa minha, mas segue um exemplinho de como utilizar o maven em um projeto do Web Tools …
primeiro, configuramos um POM simples:
<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”>
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.techoffice</groupId>
<artifactId>teste</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Application Test</name>
<description>Teste de descrição do projeto</description>
<url>http://test.techoffice.com.br</url>
</project>
Depois adicionamos algumas dependencias como em um projeto maven padrão.
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>myfaces</groupId>
<artifactId>tomahawk</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
</dependencies>
E agora algumas configurações para fazer com que o maven aceite a estrutura de diretórios do projeto como montamos ele:
<build>
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.0</version>
<configuration>
<warSourceDirectory>
${basedir}/WebContent
</warSourceDirectory>
<archiveClasses>true</archiveClasses>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<configuration>
<siteDirectory>${basedir}/site</siteDirectory>
<locales>en,pt</locales>
</configuration>
</plugin>
</plugins>
</build>
sourceDirectory é o parametro que configura o diretório de fontes java.
testSourceDirectory é o diretório que configura o diretório de fontes de teste.
warSourceDirectory dentro do plugin de geração web (maven-war-plugin) é o parametro que diz onde esta a raiz do site.
siteDirectory dentro do plugin de geração do site de documentação (maven-site-plugin) é o parametro que diz onde estão os recursos do site.
e no plugin de compilação, configuramos ele para Java 5.
prontinho, a unica coisa que não funcionou, foi que o arquivo site.xml tem que obrigatoriamente estar no diretório src/site, pois este caminho esta hard coded no código fonte do plugin do maven.
O pom.xml final, ficou com algumas frescuras a mais, alguns relatórios configurados, …
e esta a baixo como exemplo para quem quiser:
<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”>
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.techoffice</groupId>
<artifactId>teste</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Application Test</name>
<description>Teste de descrição do projeto</description>
<url>http://test.techoffice.com.br</url>
<issueManagement>
<system>Bugzilla</system>
<url>https://bugzilla.wakaleo.com/</url>
</issueManagement>
<ciManagement>
<system>Continuum</system>
<url>http://integrationserver.wakaleo.com/continuum</url>
<notifiers>
<notifier>
<type>mail</type>
<address>duke@wakaleo.com</address>
</notifier>
</notifiers>
</ciManagement>
<developers>
<developer>
<id>duke</id>
<name>Duke Java</name>
<email>duke@wakaleo.com</email>
<roles>
<role>Project Manager</role>
<role>Architect</role>
</roles>
<organization>Acme.com</organization>
<timezone>-5</timezone>
</developer>
</developers>
<mailingLists>
<mailingList>
<name>HotelDatabase project mailing list</name>
<subscribe>dev-subscribe@wakaleo.com</subscribe>
<unsubscribe>dev-unsubscribe@wakaleo.com</unsubscribe>
<post>dev@wakaleo.com</post>
<archive>http://mail-archives.wakaleo.com/modmbox/dev/
</archive>
</mailingList>
</mailingLists>
<scm>
<connection>
scm:svn:http://svn.wakaleo.com/hoteldatabase/
</connection>
<developerConnection>
scm:svn:http://svn.wakaleo.com/hoteldatabase/
</developerConnection>
<url>http://svn.wakaleo.com/viewcvs.cgi/hoteldatabase/</url>
</scm>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>myfaces</groupId>
<artifactId>tomahawk</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
</dependencies>
<distributionManagement>
<site>
<id>website</id>
<url>scp://www.mycompany.com/www/docs/project/</url>
</site>
</distributionManagement>
<build>
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.0</version>
<configuration>
<warSourceDirectory>
${basedir}/WebContent
</warSourceDirectory>
<archiveClasses>true</archiveClasses>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<configuration>
<siteDirectory>${basedir}/site</siteDirectory>
<locales>en,pt</locales>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jxr-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-clover-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<configuration>
<targetjdk>1.5</targetjdk>
<rulesets>
<ruleset>/rulesets/basic.xml</ruleset>
<ruleset>/rulesets/controversial.xml</ruleset>
</rulesets>
<format>xml</format>
<linkXref>true</linkXref>
<sourceEncoding>utf-8</sourceEncoding>
<minimumTokens>100</minimumTokens>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>changes-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>changelog-maven-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>
e quem quiser baixar o projeto de testes para dar uma olhadinha é só clicar aqui.
Bom, acho que era isto, agora posso usar o maven para gerenciar os builds dos sistemas, e o Continuum para fazer integração continua de forma bastante fácil
Se alguem se mostrar interessado, escrevo um pouquinho sobre as ferramentas de integração continua que testei semana passada.
If you enjoyed this post, make sure you subscribe to my RSS feed!
[...] October 13th, 2006 Bom, a algum tempo eu resolvi começar a usar o Maven 2, e também com o crescimento da equipe, comecei a sentir a necessidade de algum sistema de integração continua. [...]
[...] October 24th, 2006 Yeap, mais um post sobre o Maven 2 O maven 2 alem de todos os beneficios ja conhecidos por nós, aquele monte de relatórios, build simplificado, … ainda tem um monte de plugins bastante interessantes, e que facilitam bastante o desenvolvimento, um deles é este plugin do Jetty para o Maven 2. Este plugin do Jetty faz o seguinte, quando é executada a task: mvn jetty:run ele compila toda a aplicação, e inicializa um container Jetty rodando apenas aquela aplicação para facilitar os testes. [...]
Kra, tenho interesse em saber mais sobre este continuum e por gentilieza escreva um pouco sobre as ferramentas de integração continua que você testou.
Grato.
Excelente post. Eu e um amigo estamos implementando maven na consultoria onde trabalhamos e um dos principais problemas que encontramos, foi tb o de “ter que se adaptar ao maven” e não ao contrário. Claro, um pequeno probleminha de preguiça de ler o manual =).
Parabéns e vlw pelo “share”.
[]s
Muito bom o post, tenho trabalhado focado no maven essas semanas e tenho feito várias pesquisas na net. Ando testando a integracao do maven com o hudson. Tenho estudado como fazer a integracao dele com o hudson e com o svn. Outro ponto que estou tentando eh como adicionar a dependencia ao RichFaces, pois ja tentei varias maneiras mas nada. Vc acha que em um ambiente CI os desenvolvedores precisam ter tambem o maven em seu ambiente de trabalho, com o eclipse por exemplo, ou apenas instalado no servidor de CI?
Muito obrigado,
igor
Olá, estou com um pequeno problema com o maven, quer dizer, não é bem um problema, mas sim uma situação que acabei encontrando e pelo o que eu to conseguindo entender o maven não me atende, agora vou explicar rapidamente o meu cenário:
possuo projetos de software gerenciados por maven e um repositório de bibliotecas reutilizáveis chamado archiva, esses dois juntos gerenciam as minhas bibliotecas e os meus projetos, até ai, sem problema algum, funciona muito bem. perfeitamente. O meu problema é o seguinte, somos uma empresa aderente ao MPS.BR Nível F e estamos tentando chegar ao nível D, mas para isso precisamos melhorar a nossa gerencia de reutilizaação entre outras. Então, fiquei responsável em estudar a gerencia de reutilização, quando se fala em código fonte estamos bem servidos pelo maven, mas ao falar em artefatos reutilizáveis, o maven já não nos atende, por exemplo: Documento de casos de uso, não posso armazenar e fazer uma busca no repositório por esse tipo de documenação e nem por outro tipo qualquer de documentação, se alguém tiver uma idéia, ou ja tiver passado por um problema desses. ficarei grato pela ajuda.
att.
Victor Coutinho
victorcoutinho1985@gmail.com
Vitor, acho que o maven realmente não atende este gerenciamento de documentos …
Sugiro utilizar um Wiki para isto …