automação no ambientautomação no ambiente de desenvolvimento com maven e ant
TRANSCRIPT
Automação no ambiente Automação no ambiente de desenvolvimento com de desenvolvimento com
Maven e ANTMaven e ANT
Responsável: Thiago MorettoResponsável: Thiago MorettoCo-responsável: João Bosco MonteiroCo-responsável: João Bosco Monteiro
Workshop de Nivelamento Interno Workshop de Nivelamento Interno GPEC/TecsinapseGPEC/Tecsinapse
Versão: 1.0 23/Abr/07
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
RoteiroRoteiro
IntroduçãoIntrodução ANTANT MavenMaven Vantagens e desvantagensVantagens e desvantagens Modelo de desenvolvimentoModelo de desenvolvimento Visão geralVisão geral Uso da ferramentaUso da ferramenta FuncionamentoFuncionamento Testes unitáriosTestes unitários Outras característicasOutras características ConclusãoConclusão
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
IntroduçãoIntrodução
Ferramentas como o ANT e Maven Ferramentas como o ANT e Maven desempenham papéis fundamentais em desempenham papéis fundamentais em qualquer ambiente de desenvolvimento.qualquer ambiente de desenvolvimento.
AutomaçãoAutomação PadronizaçãoPadronização IntegraçãoIntegração ColaboraçãoColaboração DistribuiçãoDistribuição
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
ANTANT
Ferramenta versátil de construção que Ferramenta versátil de construção que automatiza processo de compilação, automatiza processo de compilação, empacotamento e distribuição de um empacotamento e distribuição de um projeto.projeto.
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Visão geral do ANTVisão geral do ANT
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Exemplo de um buildfileExemplo de um buildfile
<project name="MeuProjeto" default="compile" basedir="."> <target name="init">
<property name="src" value="src"/> <property name="dist" value="classes"/>
</target> <target name="clean" depends="init">
<deltree dir="${dist}"/> </target> <target name="prepare" depends=“clean">
<mkdir dir="${dist}"/> </target>
<target name="compile" depends="init, clean, prepare"> <javac srcdir="${src}" destdir="${dist}"/>
</target> </project>
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
O que é Maven?O que é Maven?
ANT != MavenANT != Maven
O Maven oferece uma infra-estrutura de O Maven oferece uma infra-estrutura de administração de projetos, desde a administração de projetos, desde a compilação, a distribuição, a compilação, a distribuição, a documentação até a colaboração.documentação até a colaboração.
Baseado no conceito de POM Baseado no conceito de POM (Project Object Model), arquivo (Project Object Model), arquivo pom.xmlpom.xml
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Vantagens do MavenVantagens do Maven
Aumento de produtividadeAumento de produtividade Melhor gestão do projetoMelhor gestão do projeto Padronização de estruturaPadronização de estrutura Automatização das dependênciasAutomatização das dependências Baseado em plugins. Fácil extensão das Baseado em plugins. Fácil extensão das funcionalidades funcionalidades Automatiza teste unitários com JUnitAutomatiza teste unitários com JUnit
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Desvantages do MavenDesvantages do Maven
Menor versatilidade do que o ANT. Mas Menor versatilidade do que o ANT. Mas são ferramentas bem diferentes!são ferramentas bem diferentes! Curva de aprendizado considerávelCurva de aprendizado considerável Maior complexidade na configuração do Maior complexidade na configuração do ambienteambiente
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Modelo de desenvolvimento do MavenModelo de desenvolvimento do Maven
Um processo de construção fácil e Um processo de construção fácil e uniforme.uniforme. Fornece informações do projeto com Fornece informações do projeto com qualidade.qualidade. Estimula boas práticas no Estimula boas práticas no desenvolvimento.desenvolvimento. Facilita a colaboração e resolve as Facilita a colaboração e resolve as dependências.dependências.
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Visão geral do MavenVisão geral do Maven
Fonte: Maven 2 e Continuum: Automatizando o seu ambiente de desenvolvimento (Palestra JustJava 2006); Dário Luís Oliveros e José Marcelo Santuci
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Visão geral do repositório MavenVisão geral do repositório Maven
Fonte: Maven 2 e Continuum: Automatizando o seu ambiente de desenvolvimento (Palestra JustJava 2006); Dário Luís Oliveros e José Marcelo Santuci
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Grupo e artefatoGrupo e artefato
Grupo e artefato são formas genéricas de Grupo e artefato são formas genéricas de representar e organizar projetos.representar e organizar projetos.
O grupo (O grupo (groupIDgroupID) é uma forma de ) é uma forma de organizar os projetos (por exemplo, os organizar os projetos (por exemplo, os projetos do GPEC).projetos do GPEC).
Um artefato (Um artefato (artifactIdartifactId) é um identificador ) é um identificador do projeto, ou parte dele (módulo).do projeto, ou parte dele (módulo).
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
InstalaçãoInstalação
Já esta instalado neste laboratório.Já esta instalado neste laboratório.$ mvn -version$ mvn -version
Mas para instalar, baixe do site:Mas para instalar, baixe do site:http://maven.apache.org/http://maven.apache.org/
Descompacte e coloque o caminho do diretório Descompacte e coloque o caminho do diretório bin/ bin/ do Maven no do Maven no $PATH$PATH da máquina. da máquina.
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Configuração do proxyConfiguração do proxy
Crie o arquivo Crie o arquivo ~/.m2/settings.xml~/.m2/settings.xml
<settings><settings> <proxies><proxies> <proxy><proxy> <active><active>truetrue</active></active> <protocol><protocol>httphttp</protocol></protocol> <host><host>proxy.acad.ucdb.brproxy.acad.ucdb.br</host></host> <port><port>31283128</port></port> <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts><nonProxyHosts>localhost|127.0.0.1</nonProxyHosts> </proxy></proxy> </proxies></proxies></settings></settings>
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
UsoUso
Uso:Uso:$ mvn [ fase ] ...$ mvn [ fase ] ...Uma fase contém vários plugins em ação.Uma fase contém vários plugins em ação.Ou:Ou:$ mvn plugin:função$ mvn plugin:função
Exemplo, criando nova estrutura:Exemplo, criando nova estrutura:$ mvn archetype:create \ $ mvn archetype:create \
-DgroupId=br.ucdb.gpec \ -DgroupId=br.ucdb.gpec \ -DartifactId=teste1-DartifactId=teste1
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Estrutura padrão de diretóriosEstrutura padrão de diretórios
////pom.xml pom.xml Arquivo de definição do projeto Arquivo de definição do projeto/src//src//src/main/java/.../src/main/java/.../src/main/resources/.../src/main/resources/.../src/test/java/.../src/test/java/...
......
/target/ (Destino de todas as saídas...)/target/ (Destino de todas as saídas...)
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Arquivo POM mínimoArquivo POM mínimo
<project><project> <modelVersion>4.0.0</modelVersion><modelVersion>4.0.0</modelVersion> <groupId><groupId>br.ucdb.gpecbr.ucdb.gpec</groupId></groupId> <artifactId><artifactId>teste1teste1</artifactId></artifactId> <packaging><packaging>jarjar</packaging></packaging> <version><version>1.01.0</version></version> <name>teste1</name><name>teste1</name> ... ... ......</project></project>
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Compilação, empacotamento e montagemCompilação, empacotamento e montagem
Compilando:Compilando:$ mvn compiler:compile$ mvn compiler:compile
Empacotando:Empacotando:$ mvn package$ mvn package
Montando:Montando:$ mvn assembly:assembly$ mvn assembly:assembly Necessário configurar.Necessário configurar.
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Artefato e repositórioArtefato e repositório
Instala no repositório local:Instala no repositório local:$ mvn install$ mvn install
A partir deste momento, se o repositório for A partir deste momento, se o repositório for compartilhado, o projeto já estará disponível compartilhado, o projeto já estará disponível para todos.para todos.
Publica em algum repositório remoto definido Publica em algum repositório remoto definido no arquivo pom.xml.no arquivo pom.xml.$ mvn deploy$ mvn deploy
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Publicando em um repositórioPublicando em um repositório
<distributionManagement><distributionManagement> <repository><repository> <id>repo</id><id>repo</id> <name>GPEC/Tecsinapse</name><name>GPEC/Tecsinapse</name> <url><url>scp://repositorio.intranet/repo/scp://repositorio.intranet/repo/</url></url> </repository></repository> </distributionManagement></distributionManagement>
No arquivo ~/.m2/settings.xml é necessário No arquivo ~/.m2/settings.xml é necessário configurar usuario e senha ou chave pública neste configurar usuario e senha ou chave pública neste caso!caso!
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
DependênciasDependências
<dependencies><dependencies> ...... <dependency><dependency> <groupId><groupId>org.hibernateorg.hibernate</groupId></groupId> <artifactId><artifactId>hibernatehibernate</artifactId></artifactId> <version><version>3.2.0.ga3.2.0.ga</version></version> </dependency></dependency> ...... </dependencies></dependencies>
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
DependênciasDependências
As dependências são resolvidas tentando As dependências são resolvidas tentando encontrar o artefado em qualquer um dos encontrar o artefado em qualquer um dos repositórios configurados, caso não seja repositórios configurados, caso não seja possível encontrar tal artefato, o Maven pede possível encontrar tal artefato, o Maven pede que este seja instalado manualmente no que este seja instalado manualmente no repositório repositório locallocal..
$ mvn install:install-file -DgroupId=$ mvn install:install-file -DgroupId=exemploexemplo \ \ -DartifactId=-DartifactId=xyzxyz -Dversion= -Dversion=1.01.0 \ \ -Dpackaging=-Dpackaging=jarjar -Dfile= -Dfile=/tmp/xyz.jar/tmp/xyz.jar
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
DependênciasDependências
Dependências transitivas são incluídas Dependências transitivas são incluídas automaticamente.automaticamente.
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
DependênciasDependências
É possível instalar um artefato manualmente É possível instalar um artefato manualmente em um repositório remoto.em um repositório remoto.
$ mvn deploy:deploy-file $ mvn deploy:deploy-file -Dfile=...-Dfile=...-DrepositoryId=repositorio.intranet-DrepositoryId=repositorio.intranet-Durl=scp://...-Durl=scp://...
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Geração do site com documentação e relatóriosGeração do site com documentação e relatórios
Gera o site e o publica em um servidor Web.Gera o site e o publica em um servidor Web.$ mvn site$ mvn site$ mvn site:site-deploy$ mvn site:site-deploy
Java Java cross-referencecross-reference, estilo Javadoc porém , estilo Javadoc porém utilizando os arquivos fontes.utilizando os arquivos fontes.$ mvn jxr:jxr$ mvn jxr:jxr
Javadoc:Javadoc:$ mvn javadoc:javadoc$ mvn javadoc:javadoc
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Parceria Maven e ANTParceria Maven e ANT
Saudades do ANT?Saudades do ANT?$ mvn ant:ant$ mvn ant:ant
Caso houve modificações nas dependências, Caso houve modificações nas dependências, faça:faça:$ mvn ant:clean ant:ant$ mvn ant:clean ant:ant
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Integração com o EclipseIntegração com o Eclipse
Habilita o projeto e cria o classpath no Eclipse, Habilita o projeto e cria o classpath no Eclipse, agora é só importá-lo na ferramenta.agora é só importá-lo na ferramenta.$$ mvn eclipse:eclipsemvn eclipse:eclipse$ mvn $ mvn -Declipse.workspace=...-Declipse.workspace=... eclipse:add-maven-repo eclipse:add-maven-repo
Se houver mudanças nas dependências, feche o Se houver mudanças nas dependências, feche o projeto dentro do Eclipse e execute:projeto dentro do Eclipse e execute:$ mvn eclipse:clean$ mvn eclipse:clean$$ mvn eclipse:eclipse mvn eclipse:eclipse $ mvn $ mvn -Declipse.workspace=...-Declipse.workspace=... eclipse:add-maven-repo eclipse:add-maven-repo
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Configuração do EclipseConfiguração do Eclipse
Em Em Preferences > Java > Build Path > Preferences > Java > Build Path > Classpath Variables Classpath Variables crie a variável M2_REPO crie a variável M2_REPO com o caminho de seu repositório. Neste caso com o caminho de seu repositório. Neste caso digite digite ~/.m2/repository/~/.m2/repository/
A partir deste momento o seu A partir deste momento o seu build pathbuild path no no Eclipse deve estar correto.Eclipse deve estar correto.
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Configuração do EclipseConfiguração do Eclipse
Para executar o Maven dentro do Eclipse vá em Para executar o Maven dentro do Eclipse vá em Run > External Tool > External Tools...Run > External Tool > External Tools...
Crie um novo Crie um novo ProgramProgram. Em . Em LocationLocation, localize o , localize o binário do Maven. Em binário do Maven. Em Working DirectoryWorking Directory coloque: coloque: ${project_loc}${project_loc}
Em Em ArgumentsArguments, os argumentos para o Maven. , os argumentos para o Maven. Exemplo: Exemplo: packagepackage
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Testes unitáriosTestes unitários
O Maven já tem suporte ao Junit.O Maven já tem suporte ao Junit. Por padrão, um projeto só pode ser Por padrão, um projeto só pode ser publicado em um repositório caso passe em publicado em um repositório caso passe em todos os seus testes unitários.todos os seus testes unitários. Na pasta Na pasta src/test/java src/test/java é onde ficam os seus é onde ficam os seus testes unitários, deve respeitar um padrão de testes unitários, deve respeitar um padrão de nome para serem executados nome para serem executados automaticamente.automaticamente.
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Outras característicasOutras características
Integração com outras IDE's (Netbeans, Integração com outras IDE's (Netbeans, IDEA...)IDEA...) Integração com SCM (Subversion, CVS, ...)Integração com SCM (Subversion, CVS, ...) Agrega o ANT.Agrega o ANT. Vários plugins podem ser encontrados pela Vários plugins podem ser encontrados pela Internet.Internet. Suporte à herança e agregação de projetos.Suporte à herança e agregação de projetos. Entre outras...Entre outras...
Workshop GPEC/TecsinapseWorkshop GPEC/Tecsinapse
Referências bibliográficasReferências bibliográficas
ANT:ANT:http://ant.apache.org/http://ant.apache.org/
Better Build with Maven 2:Better Build with Maven 2:http://www.mergere.com/m2book_download.jsphttp://www.mergere.com/m2book_download.jsp
Site do Maven:Site do Maven:http://maven.apache.org/http://maven.apache.org/
Automatizando seus projetos com o Maven 2Automatizando seus projetos com o Maven 2http://pbjug.org/jugs/documentos/maven_2http://pbjug.org/jugs/documentos/maven_2