Maven - Guia Rápido
O que é Maven?
Maven é uma ferramenta de gerenciamento e compreensão de projetos que fornece aos desenvolvedores uma estrutura completa de ciclo de vida de construção. A equipe de desenvolvimento pode automatizar a infraestrutura de construção do projeto em quase nenhum momento, pois o Maven usa um layout de diretório padrão e um ciclo de vida de construção padrão.
No caso de ambiente com várias equipes de desenvolvimento, o Maven pode configurar a maneira de trabalhar de acordo com os padrões em um tempo muito curto. Como a maioria das configurações do projeto são simples e reutilizáveis, o Maven facilita a vida do desenvolvedor ao criar relatórios, verificações, construir e testar configurações de automação.
O Maven fornece aos desenvolvedores maneiras de gerenciar o seguinte -
- Builds
- Documentation
- Reporting
- Dependencies
- SCMs
- Releases
- Distribution
- Lista de correio
Para resumir, o Maven simplifica e padroniza o processo de construção do projeto. Ele lida com compilação, distribuição, documentação, colaboração em equipe e outras tarefas perfeitamente. O Maven aumenta a capacidade de reutilização e cuida da maioria das tarefas relacionadas à construção.
Evolução Maven
O Maven foi originalmente projetado para simplificar os processos de construção no projeto Jakarta Turbine. Havia vários projetos e cada projeto continha arquivos de construção ANT ligeiramente diferentes. Os JARs foram verificados no CVS.
O grupo Apache então desenvolveu Maven que pode construir vários projetos juntos, publicar informações de projetos, implantar projetos, compartilhar JARs em vários projetos e ajudar na colaboração de equipes.
Objetivo
O objetivo principal do Maven é fornecer ao desenvolvedor o seguinte -
Um modelo abrangente para projetos, que pode ser reutilizado, mantido e mais fácil de compreender.
Plugins ou ferramentas que interagem com este modelo declarativo.
A estrutura e o conteúdo do projeto Maven são declarados em um arquivo xml, pom.xml, referido como Project Object Model (POM), que é a unidade fundamental de todo o sistema Maven. Em capítulos posteriores, explicaremos o POM em detalhes.
Convenção sobre configuração
Maven usa Convention sobre Configuration, o que significa que os desenvolvedores não precisam criar eles próprios o processo de construção.
Os desenvolvedores não precisam mencionar todos os detalhes de configuração. O Maven fornece um comportamento padrão sensato para projetos. Quando um projeto Maven é criado, o Maven cria uma estrutura de projeto padrão. O desenvolvedor só precisa colocar os arquivos de acordo e não precisa definir nenhuma configuração em pom.xml.
Como exemplo, a tabela a seguir mostra os valores padrão para arquivos de código-fonte do projeto, arquivos de recursos e outras configurações. Assumindo,${basedir} denota a localização do projeto -
Item | Padrão |
---|---|
Código fonte | $ {basedir} / src / main / java |
Recursos | $ {basedir} / src / main / resources |
Testes | $ {basedir} / src / test |
Código de byte cumprido | $ {basedir} / alvo |
JAR distribuível | $ {basedir} / target / classes |
Para construir o projeto, o Maven oferece aos desenvolvedores opções para mencionar os objetivos do ciclo de vida e as dependências do projeto (que dependem dos recursos do plugin Maven e de suas convenções padrão). Muito do gerenciamento de projetos e tarefas relacionadas à construção são mantidas pelos plug-ins Maven.
Os desenvolvedores podem construir qualquer projeto Maven sem a necessidade de entender como os plug-ins individuais funcionam. Discutiremos os plug-ins Maven em detalhes nos capítulos posteriores.
Características do Maven
Configuração simples do projeto que segue as melhores práticas.
Uso consistente em todos os projetos.
Gerenciamento de dependências incluindo atualização automática.
Um grande e crescente repositório de bibliotecas.
Extensível, com a capacidade de escrever plug-ins facilmente em Java ou linguagens de script.
Acesso instantâneo a novos recursos com pouca ou nenhuma configuração extra.
Model-based builds - O Maven é capaz de construir qualquer número de projetos em tipos de saída predefinidos, como jar, war, metadata.
Coherent site of project information - Usando os mesmos metadados do processo de construção, o maven é capaz de gerar um site e um PDF incluindo a documentação completa.
Release management and distribution publication - Sem configuração adicional, o maven se integrará ao seu sistema de controle de origem, como o CVS, e gerenciará o lançamento de um projeto.
Backward Compatibility- Você pode transportar facilmente os vários módulos de um projeto para o Maven 3 a partir de versões anteriores do Maven. Também pode suportar as versões mais antigas.
Automatic parent versioning - Não há necessidade de especificar o pai no submódulo para manutenção.
Parallel builds- Analisa o gráfico de dependência do projeto e permite construir módulos de cronograma em paralelo. Usando isso, você pode obter melhorias de desempenho de 20-50%.
Better Error and Integrity Reporting - O Maven melhorou o relatório de erros e fornece um link para a página wiki do Maven, onde você obterá a descrição completa do erro.
O Maven é uma ferramenta baseada em Java, então o primeiro requisito é ter o JDK instalado em sua máquina.
Requisitos do sistema
JDK | 1.7 ou superior. |
---|---|
Memória | Sem requisitos mínimos. |
Espaço em disco | Sem requisitos mínimos. |
Sistema operacional | Sem requisitos mínimos. |
Etapa 1 - Verifique a instalação do Java em sua máquina
Abra o console e execute o seguinte java comando.
SO | Tarefa | Comando |
---|---|---|
janelas | Abrir console de comando | c: \> versão java |
Linux | Abra o terminal de comando | $ java -version |
Mac | Terminal aberto | máquina: ~ joseph $ java -version |
Vamos verificar a saída de todos os sistemas operacionais -
SO | Resultado |
---|---|
janelas | versão java "1.7.0_60" Java (TM) SE Runtime Environment (build 1.7.0_60-b19) Java HotSpot (TM) Servidor VM de 64 bits (versão 24.60-b09, modo misto) |
Linux | versão java "1.7.0_60" Java (TM) SE Runtime Environment (build 1.7.0_60-b19) Java HotSpot (TM) Servidor VM de 64 bits (versão 24.60-b09, modo misto) |
Mac | versão java "1.7.0_60" Java (TM) SE Runtime Environment (build 1.7.0_60-b19) Java HotSpot (TM) Servidor VM de 64 bits (versão 24.60-b09, modo misto) |
Se você não tiver o Java instalado, instale o Java Software Development Kit (SDK) de https://www.oracle.com/technetwork/java/javase/downloads/index.html. Estamos assumindo o Java 1.7.0.60 como a versão instalada para este tutorial.
Etapa 2 - Definir o ambiente JAVA
Colocou o JAVA_HOMEvariável de ambiente para apontar para o local do diretório base onde o Java está instalado em sua máquina. Por exemplo -
SO | Resultado |
---|---|
janelas | Defina a variável de ambiente JAVA_HOME para C: \ Program Files \ Java \ jdk1.7.0_60 |
Linux | export JAVA_HOME = / usr / local / java-current |
Mac | export JAVA_HOME = / Library / Java / Home |
Anexe a localização do compilador Java ao caminho do sistema.
SO | Resultado |
---|---|
janelas | Anexe a string “; C: \ Arquivos de programas \ Java \ jdk1.7.0.60 \ bin” ao final da variável do sistema, Caminho. |
Linux | exportar PATH =$PATH:$JAVA_HOME / bin / |
Mac | não requerido |
Verifique a instalação do Java usando java -version comando conforme explicado acima.
Etapa 3 - Baixe o arquivo Maven
Baixe o Maven 2.2.1 de https://maven.apache.org/download.cgi.
SO | Nome do arquivo |
---|---|
janelas | apache-maven-3.3.1-bin.zip |
Linux | apache-maven-3.3.1-bin.tar.gz |
Mac | apache-maven-3.3.1-bin.tar.gz |
Etapa 4 - Extraia o arquivo Maven
Extraia o arquivo para o diretório em que deseja instalar o Maven 3.3.1. O subdiretório apache-maven-3.3.1 será criado a partir do arquivo.
SO | Localização (pode ser diferente com base na sua instalação) |
---|---|
janelas | C: \ Arquivos de programas \ Apache Software Foundation \ apache-maven-3.3.1 |
Linux | / usr / local / apache-maven |
Mac | / usr / local / apache-maven |
Etapa 5 - Definir as variáveis de ambiente Maven
Adicione M2_HOME, M2, MAVEN_OPTS às variáveis de ambiente.
SO | Resultado |
---|---|
janelas | Defina as variáveis de ambiente usando propriedades do sistema. M2_HOME = C: \ Arquivos de programas \ Apache Software Foundation \ apache-maven-3.3.1 M2 =% M2_HOME% \ bin MAVEN_OPTS = -Xms256m -Xmx512m |
Linux | Abra o terminal de comando e defina as variáveis de ambiente. export M2_HOME = / usr / local / apache-maven / apache-maven-3.3.1 export M2 = $ M2_HOME / bin export MAVEN_OPTS = -Xms256m -Xmx512m |
Mac | Abra o terminal de comando e defina as variáveis de ambiente. export M2_HOME = / usr / local / apache-maven / apache-maven-3.3.1 exportar M2 = $ M2_HOME / bin export MAVEN_OPTS = -Xms256m -Xmx512m |
Etapa 6 - Adicionar local do diretório bin do Maven ao caminho do sistema
Agora anexe a variável M2 ao caminho do sistema.
SO | Resultado |
---|---|
janelas | Anexe a string;% M2% ao final da variável do sistema, Caminho. |
Linux | exportar PATH =$M2:$CAMINHO |
Mac | exportar PATH =$M2:$CAMINHO |
Etapa 7 - Verificar a instalação do Maven
Agora abra o console e execute o seguinte mvn comando.
SO | Tarefa | Comando |
---|---|---|
janelas | Abrir console de comando | c: \> mvn --version |
Linux | Abra o terminal de comando | $ mvn --version |
Mac | Terminal aberto | máquina: ~ joseph $ mvn --version |
Finalmente, verifique a saída dos comandos acima, que devem ser os seguintes -
SO | Resultado |
---|---|
janelas | Apache Maven 3.3.1 (r801777; 07/08/2009 00: 46: 01 + 0530) Versão Java: 1.7.0_60 Página inicial do Java: C: \ Arquivos de programas \ Java \ jdk1.7.0_60 \ jre |
Linux | Apache Maven 3.3.1 (r801777; 07/08/2009 00: 46: 01 + 0530) Versão Java: 1.7.0_60 Página inicial do Java: C: \ Arquivos de programas \ Java \ jdk1.7.0_60 \ jre |
Mac | Apache Maven 3.3.1 (r801777; 07/08/2009 00: 46: 01 + 0530) Versão Java: 1.7.0_60 Página inicial do Java: C: \ Arquivos de programas \ Java \ jdk1.7.0_60 \ jre |
POM significa Modelo de Objeto do Projeto. É uma unidade de trabalho fundamental no Maven. É um arquivo XML que reside no diretório base do projeto como pom.xml.
O POM contém informações sobre o projeto e vários detalhes de configuração usados pelo Maven para construir o (s) projeto (s).
O POM também contém os objetivos e plug-ins. Ao executar uma tarefa ou objetivo, o Maven procura o POM no diretório atual. Ele lê o POM, obtém as informações de configuração necessárias e, em seguida, executa a meta. Algumas das configurações que podem ser especificadas no POM são as seguintes -
- dependências do projeto
- plugins
- goals
- construir perfis
- versão do projeto
- developers
- lista de correio
Antes de criar um POM, devemos primeiro decidir o projeto group (groupId), é name (artifactId) e sua versão como esses atributos ajudam a identificar exclusivamente o projeto no repositório.
Exemplo POM
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
</project>
Deve-se observar que deve haver um único arquivo POM para cada projeto.
Todos os arquivos POM requerem o project elemento e três campos obrigatórios: groupId, artifactId, version.
A notação de projetos no repositório é groupId:artifactId:version.
Requisitos mínimos para um POM -
Sr. Não. | Nó e descrição |
---|---|
1 | Project root Esta é a tag raiz do projeto. Você precisa especificar as configurações básicas do esquema, como esquema apache e especificação w3.org. |
2 | Model version A versão do modelo deve ser 4.0.0. |
3 | groupId Este é um Id do grupo do projeto. Geralmente, isso é único em uma organização ou projeto. Por exemplo, um grupo bancário com.company.bank tem todos os projetos relacionados a bancos. |
4 | artifactId Este é um Id do projeto. Geralmente é o nome do projeto. Por exemplo, banco de consumo. Junto com o groupId, o artifactId define a localização do artefato no repositório. |
5 | version Esta é a versão do projeto. Junto com o groupId, ele é usado dentro do repositório de um artefato para separar as versões umas das outras. Por exemplo - com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1. |
Super POM
O Super POM é o POM padrão do Maven. Todos os POMs herdam de um pai ou padrão (apesar de explicitamente definido ou não). Este POM básico é conhecido como oSuper POMe contém valores herdados por padrão.
O Maven usa o POM efetivo (configuração do super pom mais configuração do projeto) para executar o objetivo relevante. Ajuda os desenvolvedores a especificar detalhes mínimos de configuração em seu pom.xml. Embora as configurações possam ser substituídas facilmente.
Uma maneira fácil de ver as configurações padrão do super POM é executar o seguinte comando: mvn help:effective-pom
Crie um pom.xml em qualquer diretório em seu computador. Use o conteúdo do exemplo pom mencionado acima.
No exemplo abaixo, criamos um pom.xml na pasta C: \ MVN \ project.
Agora abra o console de comando, vá para a pasta que contém pom.xml e execute o seguinte mvn comando.
C:\MVN\project>mvn help:effective-pom
O Maven iniciará o processamento e exibirá o pom efetivo.
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'help'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
[INFO] task-segment: [help:effective-pom] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [help:effective-pom {execution: default-cli}]
[INFO]
.....
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------
O POM efetivo é exibido como resultado no console, após a aplicação de herança, interpolação e perfis.
<?xml version="1.0" encoding="UTF-8"?>
<!-- ============================================== -->
<!-- -->
<!-- Generated by Maven Help Plugin on 2015-04-09T11:41:51 -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/ -->
<!-- -->
<!-- ==============================================-->
<!-- ==============================================-->
<!-- -->
<!-- Effective POM for project -->
<!-- 'com.companyname.project-group:project-name:jar:1.0' -->
<!-- -->
<!-- ============================================== -->
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
<scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
<outputDirectory>C:\MVN\project\target\classes</outputDirectory>
<testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
<resources>
<resource>
<mergeId>resource-0</mergeId>
<directory>C:\MVN\project\src\main\resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<mergeId>resource-1</mergeId>
<directory>C:\MVN\project\src\test\resources</directory>
</testResource>
</testResources>
<directory>C:\MVN\project\target</directory>
<finalName>project-1.0</finalName>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin< /artifactId>
<version>2.2-beta-2</version>
</plugin>
<plugin>
<artifactId>maven-clean-plugin< /artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.0</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.4</version>
</plugin>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.3.1</version>
</plugin>
<plugin>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.1</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.5</version>
</plugin>
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<plugin>
<artifactId>maven-rar-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.0-beta-8</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>2.0-beta-7</version>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.0.4</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1-alpha-2</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-help-plugin</artifactId>
<version>2.1.1</version>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
</pluginRepository>
</pluginRepositories>
<reporting>
<outputDirectory>C:\MVN\project\target/site</outputDirectory>
</reporting>
</project>
No pom.xml acima, você pode ver a estrutura de pastas de origem do projeto padrão, diretório de saída, plug-ins necessários, repositórios, diretório de relatório, que o Maven usará ao executar os objetivos desejados.
Maven pom.xml também não precisa ser escrito manualmente. Maven fornece vários plug-ins de arquétipo para criar projetos, que, em ordem, criam a estrutura do projeto e pom.xml
O que é Build Lifecycle?
Um Build Lifecycle é uma sequência bem definida de fases, que definem a ordem em que os objetivos devem ser executados. Aqui, a fase representa um estágio do ciclo de vida. Por exemplo, um típicoMaven Build Lifecycle consiste na seguinte sequência de fases.
Fase | Alças | Descrição |
---|---|---|
prepare-resources | cópia de recursos | A cópia de recursos pode ser personalizada nesta fase. |
validar | Validando a informação | Valida se o projeto está correto e se todas as informações necessárias estão disponíveis. |
compilar | compilação | A compilação do código-fonte é feita nesta fase. |
Teste | Testando | Testa o código-fonte compilado adequado para a estrutura de teste. |
pacote | embalagem | Esta fase cria o pacote JAR / WAR conforme mencionado no pacote em POM.xml. |
instalar | instalação | Esta fase instala o pacote no repositório maven local / remoto. |
Implantar | Implantando | Copia o pacote final para o repositório remoto. |
Sempre têm pre e post fases para registrar goals, que deve ser executado antes ou depois de uma fase específica.
Quando o Maven começa a construir um projeto, ele passa por uma sequência definida de fases e executa metas, que são registradas em cada fase.
O Maven tem os três ciclos de vida padrão a seguir -
- clean
- padrão (ou build)
- site
UMA goalrepresenta uma tarefa específica que contribui para a construção e gestão de um projeto. Ele pode estar limitado a zero ou mais fases de construção. Um objetivo não vinculado a nenhuma fase de construção pode ser executado fora do ciclo de vida de construção por invocação direta.
A ordem de execução depende da ordem em que o (s) objetivo (s) e as fases de construção são chamados. Por exemplo, considere o comando abaixo. oclean e package argumentos são fases de construção, enquanto o dependency:copy-dependencies é uma meta.
mvn clean dependency:copy-dependencies package
Aqui, a fase de limpeza será executada primeiro, seguida peladependency:copy-dependencies goale, finalmente , a fase do pacote será executada.
Ciclo de vida limpo
Quando executamos o comando mvn pós-limpeza , o Maven invoca o ciclo de vida de limpeza que consiste nas seguintes fases.
- pre-clean
- clean
- post-clean
A meta de limpeza do Maven (clean: clean) está vinculada à fase de limpeza no ciclo de vida limpo. Estáclean:cleangoalexclui a saída de uma construção excluindo o diretório de construção. Portanto, quando o comando mvn clean é executado, o Maven exclui o diretório de construção.
Podemos personalizar esse comportamento mencionando objetivos em qualquer uma das fases acima do ciclo de vida limpo.
No exemplo a seguir, vamos anexar maven-antrun-plugin: run goal às fases de pré-limpeza, limpeza e pós-limpeza. Isso nos permitirá ecoar mensagens de texto exibindo as fases do ciclo de vida limpo.
Criamos um pom.xml na pasta C: \ MVN \ project.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-clean</id>
<phase>pre-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-clean phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.clean</id>
<phase>clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>clean phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.post-clean</id>
<phase>post-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>post-clean phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Agora abra o console de comando, vá para a pasta que contém pom.xml e execute o seguinte mvn comando.
C:\MVN\project>mvn post-clean
O Maven começará a processar e exibir todas as fases do ciclo de vida limpo.
[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-clean}]
[INFO] Executing tasks
[echo] pre-clean phase
[INFO] Executed tasks
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO] [antrun:run {execution: id.post-clean}]
[INFO] Executing tasks
[echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: > 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------
Você pode tentar afinar mvn clean comando, que exibirá pre-cleanE limpo. Nada será executado porpost-clean fase.
Ciclo de vida padrão (ou construção)
Este é o ciclo de vida principal do Maven e é usado para construir o aplicativo. Tem as seguintes 21 fases.
Sr. Não. | Fase e descrição do ciclo de vida |
---|---|
1 | validate Valida se o projeto está correto e todas as informações necessárias estão disponíveis para concluir o processo de construção. |
2 | initialize Inicializa o estado de construção, por exemplo definir propriedades. |
3 | generate-sources Gere qualquer código-fonte a ser incluído na fase de compilação. |
4 | process-sources Processe o código-fonte, por exemplo, filtre qualquer valor. |
5 | generate-resources Gere recursos a serem incluídos no pacote. |
6 | process-resources Copie e processe os recursos no diretório de destino, pronto para a fase de empacotamento. |
7 | compile Compile o código fonte do projeto. |
8 | process-classes Pós-processe os arquivos gerados a partir da compilação, por exemplo, para fazer aprimoramento / otimização de bytecode em classes Java. |
9 | generate-test-sources Gere qualquer código-fonte de teste a ser incluído na fase de compilação. |
10 | process-test-sources Processe o código-fonte de teste, por exemplo, filtre quaisquer valores. |
11 | test-compile Compile o código-fonte do teste no diretório de destino do teste. |
12 | process-test-classes Processe os arquivos gerados a partir da compilação do arquivo de código de teste. |
13 | test Execute testes usando uma estrutura de teste de unidade adequada (Junit é uma delas). |
14 | prepare-package Execute todas as operações necessárias para preparar um pacote antes da embalagem real. |
15 | package Pegue o código compilado e empacote-o em seu formato distribuível, como um arquivo JAR, WAR ou EAR. |
16 | pre-integration-test Execute as ações necessárias antes que os testes de integração sejam executados. Por exemplo, configurando o ambiente necessário. |
17 | integration-test Processe e implante o pacote, se necessário, em um ambiente onde os testes de integração possam ser executados. |
18 | post-integration-test Execute as ações necessárias após a execução dos testes de integração. Por exemplo, limpar o meio ambiente. |
19 | verify Execute qualquer verificação para verificar se o pacote é válido e atende aos critérios de qualidade. |
20 | install Instale o pacote no repositório local, que pode ser usado como uma dependência em outros projetos localmente. |
21 | deploy Copia o pacote final para o repositório remoto para compartilhamento com outros desenvolvedores e projetos. |
Existem alguns conceitos importantes relacionados ao Maven Lifecycles, que vale a pena mencionar -
Quando uma fase é chamada via comando Maven, por exemplo mvn compile, apenas as fases até e incluindo essa fase serão executadas.
Diferentes objetivos do maven serão vinculados a diferentes fases do ciclo de vida do Maven, dependendo do tipo de embalagem (JAR / WAR / EAR).
No exemplo a seguir, iremos anexar maven-antrun-plugin: run goal a algumas das fases do ciclo de vida do Build. Isso nos permitirá ecoar mensagens de texto exibindo as fases do ciclo de vida.
Atualizamos pom.xml na pasta C: \ MVN \ project.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.validate</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>validate phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.compile</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>compile phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.test</id>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>test phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.package</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>package phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.deploy</id>
<phase>deploy</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>deploy phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Agora abra o console de comando, vá para a pasta que contém pom.xml e execute o seguinte mvn comando.
C:\MVN\project>mvn compile
O Maven iniciará o processamento e exibirá as fases do ciclo de vida da construção até a fase de compilação.
[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [compile]
[INFO] -----------------------------------------------------------------
-
[INFO] [antrun:run {execution: id.validate}]
[INFO] Executing tasks
[echo] validate phase
[INFO] Executed tasks
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered
resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory
C:\MVN\project\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [antrun:run {execution: id.compile}]
[INFO] Executing tasks
[echo] compile phase
[INFO] Executed tasks
[INFO] -----------------------------------------------------------------
-
[INFO] BUILD SUCCESSFUL
[INFO] -----------------------------------------------------------------
-
[INFO] Total time: 2 seconds
[INFO] Finished at: Sat Jul 07 20:18:25 IST 2012
[INFO] Final Memory: 7M/64M
[INFO] -----------------------------------------------------------------
-
Ciclo de Vida do Site
O plugin do site Maven é geralmente usado para criar documentação nova para criar relatórios, implantar o site, etc. Ele tem as seguintes fases -
- pre-site
- site
- post-site
- site-deploy
No exemplo a seguir, vamos anexar maven-antrun-plugin:runobjetivo para todas as fases do ciclo de vida do site. Isso nos permitirá ecoar mensagens de texto exibindo as fases do ciclo de vida.
Atualizamos pom.xml na pasta C: \ MVN \ project.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-site</id>
<phase>pre-site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.site</id>
<phase>site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.post-site</id>
<phase>post-site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>post-site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.site-deploy</id>
<phase>site-deploy</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>site-deploy phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Agora abra o console de comando, vá para a pasta que contém pom.xml e execute o seguinte mvn comando.
C:\MVN\project>mvn site
O Maven começará a processar e exibir as fases do ciclo de vida do site até a fase do site.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [site]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-site}]
[INFO] Executing tasks
[echo] pre-site phase
[INFO] Executed tasks
[INFO] [site:site {execution: default-site}]
[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Project Plugins" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.
[INFO] [antrun:run {execution: id.site}]
[INFO] Executing tasks
[echo] site phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Sat Jul 07 15:25:10 IST 2012
[INFO] Final Memory: 24M/149M
[INFO] ------------------------------------------------------------------
O que é Build Profile?
Um perfil de construção é um conjunto de valores de configuração, que pode ser usado para definir ou substituir os valores padrão da construção Maven. Usando um perfil de construção, você pode customizar a construção para diferentes ambientes, como ambientes de Produção v / s Desenvolvimento.
Os perfis são especificados no arquivo pom.xml usando seus elementos activeProfiles / profiles e são acionados de várias maneiras. Os perfis modificam o POM no momento da construção e são usados para fornecer aos parâmetros diferentes ambientes de destino (por exemplo, o caminho do servidor de banco de dados nos ambientes de desenvolvimento, teste e produção).
Tipos de Perfil de Construção
Perfis de construção são principalmente de três tipos.
Tipo | Onde está definido |
---|---|
Por Projeto | Definido no arquivo POM do projeto, pom.xml |
Por usuário | Definido no arquivo xml de configurações do Maven (% USER_HOME% /. M2 / settings.xml) |
Global | Definido no arquivo xml de configurações globais Maven (% M2_HOME% / conf / settings.xml) |
Ativação de Perfil
Um perfil de construção Maven pode ser ativado de várias maneiras.
- Usando explicitamente a entrada do console de comando.
- Por meio de configurações de maven.
- Baseado em variáveis de ambiente (variáveis de usuário / sistema).
- Configurações do sistema operacional (por exemplo, família Windows).
- Arquivos presentes / ausentes.
Exemplos de ativação de perfil
Vamos supor a seguinte estrutura de diretório do seu projeto -
Agora, sob src/main/resources, existem três arquivos específicos do ambiente -
Sr. Não. | Nome e descrição do arquivo |
---|---|
1 | env.properties configuração padrão usada se nenhum perfil for mencionado. |
2 | env.test.properties configuração de teste quando o perfil de teste é usado. |
3 | env.prod.properties configuração de produção quando o perfil de produção é usado. |
Ativação explícita de perfil
No exemplo a seguir, vamos anexar maven-antrun-plugin: run goal para testar a fase. Isso nos permitirá ecoar mensagens de texto para diferentes perfis. Estaremos usando pom.xml para definir perfis diferentes e vamos ativar o perfil no console de comando usando o comando maven.
Suponha que criamos o seguinte pom.xml na pasta C: \ MVN \ project.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<profiles>
<profile>
<id>test</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>Using env.test.properties</echo>
<copy file="src/main/resources/env.test.properties"
tofile="${project.build.outputDirectory}
/env.properties"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
Agora abra o console de comando, vá para a pasta que contém pom.xml e execute o seguinte mvncomando. Passe o nome do perfil como argumento usando a opção -P.
C:\MVN\project>mvn test -Ptest
O Maven começará a processar e exibir o resultado do perfil de construção de teste.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [test]
[INFO] ------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\project\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\project\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
There are no tests to run.
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks
[echo] Using env.test.properties
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Sun Jul 08 14:55:41 IST 2012
[INFO] Final Memory: 8M/64M
[INFO] ------------------------------------------------------------------
Agora, como exercício, você pode realizar as seguintes etapas -
Adicione outro elemento de perfil ao elemento de perfis de pom.xml (copie o elemento de perfil existente e cole-o onde os elementos de perfil terminam).
Atualize a id deste elemento de perfil de teste para normal.
Atualize a seção da tarefa para echo env.properties e copie env.properties para o diretório de destino.
Repita novamente as três etapas acima, atualize a id para a seção prod e task para env.prod.properties.
Isso é tudo. Agora você tem três perfis de construção prontos (normal / teste / prod).
Agora abra o console de comando, vá para a pasta que contém pom.xml e execute o seguinte mvncomandos. Passe os nomes dos perfis como argumento usando a opção -P.
C:\MVN\project>mvn test -Pnormal
C:\MVN\project>mvn test -Pprod
Verifique a saída da construção para ver a diferença.
Ativação do perfil por meio das configurações do Maven
Abra o Maven settings.xml arquivo disponível no diretório% USER_HOME% /. m2 onde %USER_HOME%representa o diretório inicial do usuário. Se o arquivo settings.xml não estiver lá, crie um novo.
Adicione o perfil de teste como um perfil ativo usando o nó Perfis ativos, conforme mostrado abaixo no exemplo.
<settings 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/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>maven.dev.snaponglobal.com</id>
<name>Internal Artifactory Maven repository</name>
<url>http://repo1.maven.org/maven2/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
<activeProfiles>
<activeProfile>test</activeProfile>
</activeProfiles>
</settings>
Agora abra o console de comando, vá para a pasta que contém pom.xml e execute o seguinte mvncomando. Não passe o nome do perfil usando a opção -P. O Maven exibirá o resultado do perfil de teste sendo um perfil ativo.
C:\MVN\project>mvn test
Ativação de perfil por meio de variáveis de ambiente
Agora remova o perfil ativo do maven settings.xml e atualize o perfil de teste mencionado em pom.xml. Adicione o elemento de ativação ao elemento de perfil conforme mostrado abaixo.
O perfil de teste será acionado quando a propriedade do sistema "env" for especificada com o valor "test". Crie uma variável de ambiente "env" e defina seu valor como "teste".
<profile>
<id>test</id>
<activation>
<property>
<name>env</name>
<value>test</value>
</property>
</activation>
</profile>
Vamos abrir o console de comando, ir para a pasta que contém pom.xml e executar o seguinte mvn comando.
C:\MVN\project>mvn test
Ativação de perfil via sistema operacional
Elemento de ativação para incluir detalhes do sistema operacional conforme mostrado abaixo. Este perfil de teste será acionado quando o sistema for Windows XP.
<profile>
<id>test</id>
<activation>
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</activation>
</profile>
Agora abra o console de comando, vá para a pasta que contém pom.xml e execute o seguinte mvncomandos. Não passe o nome do perfil usando a opção -P. O Maven exibirá o resultado do perfil de teste sendo um perfil ativo.
C:\MVN\project>mvn test
Ativação de perfil via arquivo presente / ausente
Agora, elemento de ativação para incluir detalhes do sistema operacional, conforme mostrado abaixo. O perfil de teste será acionado quandotarget/generated-sources/axistools/wsdl2java/com/companyname/group está desaparecido.
<profile>
<id>test</id>
<activation>
<file>
<missing>target/generated-sources/axistools/wsdl2java/
com/companyname/group</missing>
</file>
</activation>
</profile>
Agora abra o console de comando, vá para a pasta que contém pom.xml e execute o seguinte mvncomandos. Não passe o nome do perfil usando a opção -P. O Maven exibirá o resultado do perfil de teste sendo um perfil ativo.
C:\MVN\project>mvn test
O que é um repositório Maven?
Na terminologia do Maven, um repositório é um diretório onde todos os jars do projeto, jar da biblioteca, plug-ins ou quaisquer outros artefatos específicos do projeto são armazenados e podem ser usados pelo Maven facilmente.
O repositório Maven é de três tipos. A ilustração a seguir dará uma idéia sobre esses três tipos.
- local
- central
- remote
Repositório Local
O repositório local Maven é um local de pasta em sua máquina. Ele é criado quando você executa qualquer comando maven pela primeira vez.
O repositório local Maven mantém todas as dependências do seu projeto (jars de biblioteca, jars de plug-in etc.). Quando você executa uma compilação do Maven, o Maven baixa automaticamente todos os jars de dependência para o repositório local. Isso ajuda a evitar referências a dependências armazenadas na máquina remota sempre que um projeto é construído.
O repositório local Maven por padrão é criado pelo Maven no diretório% USER_HOME%. Para substituir o local padrão, mencione outro caminho no arquivo Maven settings.xml disponível no diretório% M2_HOME% \ conf.
<settings xmlns = "http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>C:/MyLocalRepository</localRepository>
</settings>
Quando você executa o comando Maven, o Maven baixa as dependências para seu caminho personalizado.
Repositório central
O repositório central Maven é um repositório fornecido pela comunidade Maven. Ele contém um grande número de bibliotecas comumente usadas.
Quando o Maven não encontra nenhuma dependência no repositório local, ele começa a pesquisar no repositório central usando a seguinte URL - https://repo1.maven.org/maven2/
Os principais conceitos do repositório central são os seguintes -
- Este repositório é gerenciado pela comunidade Maven.
- Não é necessário configurar.
- Requer acesso à Internet para ser pesquisado.
Para navegar pelo conteúdo do repositório central maven, a comunidade maven forneceu uma URL - https://search.maven.org/#browse. Usando esta biblioteca, um desenvolvedor pode pesquisar todas as bibliotecas disponíveis no repositório central.
Repositório Remoto
Às vezes, o Maven também não encontra uma dependência mencionada no repositório central. Em seguida, ele para o processo de construção e envia uma mensagem de erro para o console. Para evitar tal situação, Maven fornece conceito deRemote Repository, que é o repositório customizado do próprio desenvolvedor que contém as bibliotecas necessárias ou outros jars de projeto.
Por exemplo, usando o POM.xml mencionado abaixo, o Maven baixará a dependência (não disponível no repositório central) dos Repositórios Remotos mencionados no mesmo pom.xml.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>com.companyname.common-lib</groupId>
<artifactId>common-lib</artifactId>
<version>1.0.0</version>
</dependency>
<dependencies>
<repositories>
<repository>
<id>companyname.lib1</id>
<url>http://download.companyname.org/maven2/lib1</url>
</repository>
<repository>
<id>companyname.lib2</id>
<url>http://download.companyname.org/maven2/lib2</url>
</repository>
</repositories>
</project>
Sequência de pesquisa de dependência Maven
Quando executamos comandos de construção do Maven, o Maven começa a procurar bibliotecas de dependência na seguinte sequência -
Step 1 - Procure dependência no repositório local, se não for encontrada, vá para a etapa 2, caso contrário, execute o processamento adicional.
Step 2 - Pesquise a dependência no repositório central, se não for encontrada e o repositório / repositórios remotos for / forem mencionados, vá para a etapa 4. Caso contrário, é baixado para o repositório local para referência futura.
Step 3 - Se um repositório remoto não for mencionado, o Maven simplesmente interrompe o processamento e gera um erro (não foi possível encontrar dependência).
Step 4- Pesquise a dependência em repositório ou repositórios remotos, se encontrada, ela é baixada para o repositório local para referência futura. Caso contrário, o Maven interrompe o processamento e gera um erro (não foi possível encontrar a dependência).
O que são plug-ins Maven?
O Maven é, na verdade, uma estrutura de execução de plug-ins em que todas as tarefas são realizadas por plug-ins. Os plug-ins Maven geralmente são usados para -
- criar arquivo jar
- criar arquivo de guerra
- compilar arquivos de código
- teste de unidade de código
- criar documentação do projeto
- criar relatórios de projeto
Um plugin geralmente fornece um conjunto de objetivos, que podem ser executados usando a seguinte sintaxe -
mvn [plugin-name]:[goal-name]
Por exemplo, um projeto Java pode ser compilado com o objetivo de compilação do maven-compiler-plugin's, executando o seguinte comando.
mvn compiler:compile
Tipos de plug-in
Maven forneceu os seguintes dois tipos de plug-ins -
Sr. Não. | Tipo e descrição |
---|---|
1 | Build plugins Eles são executados durante o processo de construção e devem ser configurados no elemento <build /> de pom.xml. |
2 | Reporting plugins Eles são executados durante o processo de geração do site e devem ser configurados no elemento <reporting /> do pom.xml. |
A seguir está a lista de alguns plug-ins comuns -
Sr. Não. | Plugin e descrição |
---|---|
1 | clean Limpa o alvo após a construção. Exclui o diretório de destino. |
2 | compiler Compila arquivos de origem Java. |
3 | surefire Executa os testes de unidade JUnit. Cria relatórios de teste. |
4 | jar Constrói um arquivo JAR do projeto atual. |
5 | war Constrói um arquivo WAR a partir do projeto atual. |
6 | javadoc Gera Javadoc para o projeto. |
7 | antrun Executa um conjunto de tarefas de formigas de qualquer fase mencionada da construção. |
Example
Nós usamos maven-antrun-pluginextensivamente em nossos exemplos para imprimir dados no console. Consulte o capítulo Build Profiles. Vamos entender melhor e criar um pom.xml na pasta C: \ MVN \ project.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.clean</id>
<phase>clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>clean phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Em seguida, abra o console de comando e vá para a pasta que contém pom.xml e execute o seguinte mvn comando.
C:\MVN\project>mvn clean
O Maven iniciará o processamento e a exibição da fase limpa do ciclo de vida limpo.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------
O exemplo acima ilustra os seguintes conceitos-chave -
Os plug-ins são especificados em pom.xml usando o elemento plug-ins.
Cada plugin pode ter vários objetivos.
Você pode definir a fase de onde o plugin deve iniciar seu processamento usando seu elemento de fase. Nós usamosclean fase.
Você pode configurar tarefas a serem executadas vinculando-as aos objetivos do plugin. Nós ligamosecho tarefa com runobjetivo do maven-antrun-plugin .
O Maven fará o download do plugin se não estiver disponível no repositório local e iniciará seu processamento.
Maven usa archetypeplugins para criar projetos. Para criar um aplicativo Java simples, usaremos o plugin maven-archetype-quickstart. No exemplo abaixo, criaremos um projeto de aplicativo Java baseado em maven na pasta C: \ MVN.
Vamos abrir o console de comando, ir para o diretório C: \ MVN e executar o seguinte mvn comando.
C:\MVN>mvn archetype:generate
-DgroupId = com.companyname.bank
-DartifactId = consumerBanking
-DarchetypeArtifactId = maven-archetype-quickstart
-DinteractiveMode = false
O Maven iniciará o processamento e criará a estrutura completa do projeto do aplicativo java.
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] -------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Batch mode
[INFO] -------------------------------------------------------------------
[INFO] Using following parameters for creating project
from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] -------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.companyname.bank
[INFO] Parameter: packageName, Value: com.companyname.bank
[INFO] Parameter: package, Value: com.companyname.bank
[INFO] Parameter: artifactId, Value: consumerBanking
[INFO] Parameter: basedir, Value: C:\MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\MVN\consumerBanking
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 14 seconds
[INFO] Finished at: Tue Jul 10 15:38:58 IST 2012
[INFO] Final Memory: 21M/124M
[INFO] ------------------------------------------------------------------
Agora vá para o diretório C: / MVN. Você verá um projeto de aplicativo java criado, denominado Consumer Banking (conforme especificado em artifactId). O Maven usa um layout de diretório padrão, conforme mostrado abaixo -
Usando o exemplo acima, podemos entender os seguintes conceitos-chave -
Sr. Não. | Estrutura e descrição da pasta |
---|---|
1 | consumerBanking contém a pasta src e pom.xml |
2 | src/main/java contém arquivos de código java na estrutura do pacote (com / companyName / bank). |
3 | src/main/test contém arquivos de código Java de teste na estrutura do pacote (com / companyName / bank). |
4 | src/main/resources ele contém arquivos de imagens / propriedades (no exemplo acima, precisamos criar essa estrutura manualmente). |
Se você observar, verá que o Maven também criou um arquivo de código-fonte Java de amostra e um arquivo de teste Java. Abra a pasta C: \ MVN \ consumerBanking \ src \ main \ java \ com \ companyname \ bank, você verá App.java.
package com.companyname.bank;
/**
* Hello world!
*
*/
public class App {
public static void main( String[] args ){
System.out.println( "Hello World!" );
}
}
Abra a pasta C: \ MVN \ consumerBanking \ src \ test \ java \ com \ companyname \ bank para ver AppTest.java.
package com.companyname.bank;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest extends TestCase {
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName ) {
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite() {
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp() {
assertTrue( true );
}
}
Os desenvolvedores devem colocar seus arquivos conforme mencionado na tabela acima e o Maven lida com todas as complexidades relacionadas à construção.
No próximo capítulo, discutiremos como construir e testar o projeto usando o maven Build and Test Project.
O que aprendemos no capítulo Criação de projeto é como criar um aplicativo Java usando Maven. Agora veremos como construir e testar o aplicativo.
Vá para o diretório C: / MVN onde você criou seu aplicativo java. AbrirconsumerBankingpasta. Você verá oPOM.xml arquivo com o seguinte conteúdo.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
</project>
Aqui você pode ver, o Maven já adicionou o Junit como framework de teste. Por padrão, o Maven adiciona um arquivo de origemApp.java e um arquivo de teste AppTest.java em sua estrutura de diretório padrão, conforme discutido no capítulo anterior.
Vamos abrir o console de comando, vá para o diretório C: \ MVN \ consumerBanking e execute o seguinte mvn comando.
C:\MVN\consumerBanking>mvn clean package
Maven começará a construir o projeto.
[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building consumerBanking
[INFO] task-segment: [clean, package]
[INFO] -------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory C:\MVN\consumerBanking\target
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\consumerBanking\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 1 source file to C:\MVN\consumerBanking\target\classes
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\consumerBanking\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to C:\MVN\consumerBanking\target\test-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\consumerBanking\target\surefire-reports
-----------------------------------------------------
T E S T S
-----------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\consumerBanking\target\
consumerBanking-1.0-SNAPSHOT.jar
[INFO]-----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]-----------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Tue Jul 10 16:52:18 IST 2012
[INFO] Final Memory: 16M/89M
[INFO]-----------------------------------------------
Você construiu seu projeto e criou o arquivo jar final, a seguir estão os principais conceitos de aprendizagem -
Damos ao maven dois objetivos, primeiro limpar o diretório de destino (limpar) e, em seguida, empacotar a saída de construção do projeto como jar (pacote).
O jar empacotado está disponível na pasta consumerBanking \ target como consumerBanking-1.0-SNAPSHOT.jar.
Os relatórios de teste estão disponíveis na pasta consumerBanking \ target \ surefire-reports.
O Maven compila o (s) arquivo (s) de código-fonte e, em seguida, testa os arquivos de código-fonte.
Em seguida, o Maven executa os casos de teste.
Finalmente, o Maven cria o pacote.
Agora abra o console de comando, vá para o diretório C: \ MVN \ consumerBanking \ target \ classes e execute o seguinte comando java.
>java com.companyname.bank.App
Você verá o resultado da seguinte forma -
Hello World!
Adicionar arquivos de origem Java
Vamos ver como podemos adicionar arquivos Java adicionais em nosso projeto. Abra a pasta C: \ MVN \ consumerBanking \ src \ main \ java \ com \ companyname \ bank, crie a classe Util nela como Util.java.
package com.companyname.bank;
public class Util {
public static void printMessage(String message){
System.out.println(message);
}
}
Atualize a classe App para usar a classe Util.
package com.companyname.bank;
/**
* Hello world!
*
*/
public class App {
public static void main( String[] args ){
Util.printMessage("Hello World!");
}
}
Agora abra o console de comando, vá para C:\MVN\consumerBanking diretório e execute o seguinte mvn comando.
>mvn clean compile
Depois que a construção do Maven for bem-sucedida, vá para o diretório C: \ MVN \ consumerBanking \ target \ classes e execute o seguinte comando java.
>java -cp com.companyname.bank.App
Você verá o resultado da seguinte forma -
Hello World!
Como você sabe, o Maven faz o gerenciamento de dependências usando o conceito de Repositórios. Mas o que acontece se a dependência não estiver disponível em nenhum dos repositórios remotos e no repositório central? Maven fornece resposta para tal cenário usando o conceito deExternal Dependency.
Por exemplo, vamos fazer as seguintes alterações no projeto criado no capítulo 'Criando projeto Java'.
Adicionar lib pasta para a pasta src.
Copie qualquer jar para a pasta lib. Nós usamosldapjdk.jar, que é uma biblioteca auxiliar para operações LDAP.
Agora, a estrutura do nosso projeto deve se parecer com o seguinte -
Aqui você tem sua própria biblioteca, específica para o projeto, que é um caso usual e contém jars, que podem não estar disponíveis em nenhum repositório para download do maven. Se o seu código estiver usando esta biblioteca com o Maven, a compilação do Maven falhará, pois não pode fazer download ou consultar esta biblioteca durante a fase de compilação.
Para lidar com a situação, vamos adicionar esta dependência externa ao maven pom.xml usando a seguinte maneira.
<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>com.companyname.bank</groupId>
<artifactId>consumerBanking</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>consumerBanking</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ldapjdk</groupId>
<artifactId>ldapjdk</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
</dependency>
</dependencies>
</project>
Observe o segundo elemento de dependência em dependências no exemplo acima, que limpa os seguintes conceitos-chave sobre External Dependency.
Dependências externas (localização do jar da biblioteca) podem ser configuradas em pom.xml da mesma forma que outras dependências.
Especifique groupId igual ao nome da biblioteca.
Especifique artifactId igual ao nome da biblioteca.
Especifique o escopo como sistema.
Especifique o caminho do sistema relativo ao local do projeto.
Espero que agora você esteja claro sobre as dependências externas e seja capaz de especificar dependências externas em seu projeto Maven.
Este tutorial irá ensiná-lo a criar a documentação do aplicativo de uma vez. Então vamos começar, vá para o diretório C: / MVN onde você criou seu javaconsumerBankingaplicação usando os exemplos dados nos capítulos anteriores. AbrirconsumerBanking pasta e execute o seguinte mvn comando.
C:\MVN>mvn site
Maven começará a construir o projeto.
[INFO] Scanning for projects...
[INFO]-----------------------------------------------
[INFO] Building consumerBanking
[INFO] task-segment: [site]
[INFO]-----------------------------------------------
[INFO] [site:site {execution: default-site}]
[INFO] artifact org.apache.maven.skins:maven-default-skin:
checking for updates from central
[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.
[INFO]-----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]-----------------------------------------------
[INFO] Total time: 16 seconds
[INFO] Finished at: Wed Jul 11 18:11:18 IST 2012
[INFO] Final Memory: 23M/148M
[INFO]-----------------------------------------------
A documentação do seu projeto agora está pronta. O Maven criou um site dentro do diretório de destino.
Abra a pasta C: \ MVN \ consumerBanking \ target \ site. Clique em index.html para ver a documentação.
O Maven cria a documentação usando um mecanismo de processamento de documentação chamado Doxia, que lê vários formatos de origem em um modelo de documento comum. Para escrever documentação para seu projeto, você pode escrever seu conteúdo nos seguintes formatos comumente usados que são analisados pelo Doxia.
Nome do formato | Descrição | Referência |
---|---|---|
XDoc | Um formato de documentação Maven 1.x | https://jakarta.apache.org/site |
FML | Usado para documentos de FAQ | https://maven.apache.org |
O Maven fornece aos usuários uma lista muito grande de diferentes tipos de modelos de projeto (614 em números) usando o conceito de Archetype. O Maven ajuda os usuários a iniciar rapidamente um novo projeto java usando o seguinte comando.
mvn archetype:generate
O que é arquétipo?
Archetype é um plugin Maven cuja tarefa é criar uma estrutura de projeto de acordo com seu modelo. Vamos usar o plugin de início rápido de arquétipo para criar um aplicativo Java simples aqui.
Usando modelo de projeto
Vamos abrir o console de comando, vá para o C:\ > MVN diretório e execute o seguinte mvn comando.
C:\MVN>mvn archetype:generate
O Maven iniciará o processamento e pedirá para escolher o arquétipo necessário.
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] -------------------------------------------------------------------
[INFO] Preparing archetype:generate
...
600: remote −> org.trailsframework:trails-archetype (-)
601: remote −> org.trailsframework:trails-secure-archetype (-)
602: remote −> org.tynamo:tynamo-archetype (-)
603: remote −> org.wicketstuff.scala:wicket-scala-archetype (-)
604: remote −> org.wicketstuff.scala:wicketstuff-scala-archetype
Basic setup for a project that combines Scala and Wicket,
depending on the Wicket-Scala project.
Includes an example Specs test.)
605: remote −> org.wikbook:wikbook.archetype (-)
606: remote −> org.xaloon.archetype:xaloon-archetype-wicket-jpa-glassfish (-)
607: remote −> org.xaloon.archetype:xaloon-archetype-wicket-jpa-spring (-)
608: remote −> org.xwiki.commons:xwiki-commons-component-archetype
(Make it easy to create a maven project for creating XWiki Components.)
609: remote −> org.xwiki.rendering:xwiki-rendering-archetype-macro
(Make it easy to create a maven project for creating XWiki Rendering Macros.)
610: remote −> org.zkoss:zk-archetype-component (The ZK Component archetype)
611: remote −> org.zkoss:zk-archetype-webapp (The ZK wepapp archetype)
612: remote −> ru.circumflex:circumflex-archetype (-)
613: remote −> se.vgregion.javg.maven.archetypes:javg-minimal-archetype (-)
614: remote −> sk.seges.sesam:sesam-annotation-archetype (-)
Choose a number or apply filter
(format: [groupId:]artifactId, case sensitive contains): 203:
Pressione Enter para escolher a opção padrão (203: maven-archetype-quickstart)
O Maven pedirá uma versão particular do arquétipo.
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6:
Pressione Enter para escolher a opção padrão (6: maven-archetype-quickstart: 1.1)
O Maven pedirá os detalhes do projeto. Insira os detalhes do projeto conforme solicitado. Pressione Enter se o valor padrão for fornecido. Você pode substituí-los inserindo seu próprio valor.
Define value for property 'groupId': : com.companyname.insurance
Define value for property 'artifactId': : health
Define value for property 'version': 1.0-SNAPSHOT:
Define value for property 'package': com.companyname.insurance:
O Maven pedirá a confirmação dos detalhes do projeto. Pressione Enter ou Y.
Confirm properties configuration:
groupId: com.companyname.insurance
artifactId: health
version: 1.0-SNAPSHOT
package: com.companyname.insurance
Y:
Agora o Maven começará a criar a estrutura do projeto e exibirá o seguinte -
[INFO]-----------------------------------------------
[INFO] Using following parameters for creating project
from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO]-----------------------------------------------
[INFO] Parameter: groupId, Value: com.companyname.insurance
[INFO] Parameter: packageName, Value: com.companyname.insurance
[INFO] Parameter: package, Value: com.companyname.insurance
[INFO] Parameter: artifactId, Value: health
[INFO] Parameter: basedir, Value: C:\MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\MVN\health
[INFO]-----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]-----------------------------------------------
[INFO] Total time: 4 minutes 12 seconds
[INFO] Finished at: Fri Jul 13 11:10:12 IST 2012
[INFO] Final Memory: 20M/90M
[INFO]-----------------------------------------------
Projeto Criado
Agora vá para C:\ > MVNdiretório. Você verá um projeto de aplicativo java criado, denominadohealth, que foi dado como artifactIdno momento da criação do projeto. O Maven criará um layout de diretório padrão para o projeto, conforme mostrado abaixo -
POM.xml criado
O Maven gera um arquivo POM.xml para o projeto conforme listado 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.insurance</groupId>
<artifactId>health</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
App.java criado
O Maven gera um arquivo de origem java de amostra, App.java, para o projeto, conforme listado abaixo -
Localização: C:\ > MVN > health > src > main > java > com > companyname > insurance > App.java.
package com.companyname.insurance;
/**
* Hello world!
*
*/
public class App {
public static void main( String[] args ) {
System.out.println( "Hello World!" );
}
}
AppTest.java criado
O Maven gera um arquivo de teste fonte java de amostra, AppTest.java para o projeto, conforme listado abaixo -
Localização: C:\ > MVN > health > src > test > java > com > companyname > insurance > AppTest.java.
package com.companyname.insurance;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest extends TestCase {
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName ) {
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite() {
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp() {
assertTrue( true );
}
}
Agora você pode ver o poder do Maven. Você pode criar qualquer tipo de projeto usando um único comando no maven e pode iniciar seu desenvolvimento.
Diferentes Arquétipos
Sr. Não. | Archetype ArtifactIds e descrição |
---|---|
1 | maven-archetype-archetype Um arquétipo, que contém um arquétipo de amostra. |
2 | maven-archetype-j2ee-simple Um arquétipo, que contém um aplicativo J2EE de amostra simplificado. |
3 | maven-archetype-mojo Um arquétipo, que contém uma amostra de um plug-in Maven de amostra. |
4 | maven-archetype-plugin Um arquétipo, que contém um plugin de amostra do Maven. |
5 | maven-archetype-plugin-site Um arquétipo, que contém um exemplo de site de plug-in Maven. |
6 | maven-archetype-portlet Um arquétipo, que contém um Portlet JSR-268 de amostra. |
7 | maven-archetype-quickstart Um arquétipo, que contém um projeto Maven de amostra. |
8 | maven-archetype-simple Um arquétipo, que contém um projeto Maven simples. |
9 | maven-archetype-site Um arquétipo, que contém um site Maven de amostra para demonstrar alguns dos tipos de documentos suportados, como APT, XDoc e FML, e como i18n seu site. |
10 | maven-archetype-site-simple Um arquétipo, que contém um site Maven de amostra. |
11 | maven-archetype-webapp Um arquétipo, que contém uma amostra do projeto Maven Webapp. |
Um grande aplicativo de software geralmente consiste em vários módulos e é um cenário comum onde várias equipes estão trabalhando em diferentes módulos do mesmo aplicativo. Por exemplo, considere que uma equipe está trabalhando no front-end do aplicativo como um projeto app-ui (app-ui.jar: 1.0) e está usando um projeto de serviço de dados (data-service.jar: 1.0).
Agora pode acontecer que a equipe que trabalha no serviço de dados esteja passando por correções de bugs ou melhorias em um ritmo rápido e eles estejam liberando a biblioteca para um repositório remoto quase todos os dias.
Agora, se a equipe de serviço de dados fizer upload de uma nova versão a cada dois dias, surgirão os seguintes problemas -
a equipe de serviço de dados deve avisar a equipe app-ui sempre que lançar um código atualizado.
A equipe app-ui precisa atualizar seu pom.xml regularmente para obter a versão atualizada.
Para lidar com esse tipo de situação, SNAPSHOT conceito entra em jogo.
O que é SNAPSHOT?
SNAPSHOT é uma versão especial que indica uma cópia de desenvolvimento atual. Ao contrário das versões regulares, o Maven verifica se há uma nova versão do SNAPSHOT em um repositório remoto para cada construção.
Agora a equipe de serviço de dados liberará SNAPSHOT de seu código atualizado todas as vezes para o repositório, digamos data-service: 1.0-SNAPSHOT, substituindo um jar mais antigo de SNAPSHOT.
Instantâneo vs versão
No caso da versão, se o Maven baixou uma vez a versão mencionada, digamos data-service: 1.0, ele nunca tentará baixar um 1.0 mais recente disponível no repositório. Para baixar o código atualizado, a versão do serviço de dados deve ser atualizada para 1.1.
No caso do INSTANTÂNEO, o Maven buscará automaticamente o INSTANTÂNEO o mais recente (data-service: 1.0-SNAPSHOT) cada vez que a equipe app-ui constrói seu projeto.
app-ui pom.xml
app-ui projeto está usando 1.0-SNAPSHOT de serviço de dados.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>app-ui</groupId>
<artifactId>app-ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>data-service</groupId>
<artifactId>data-service</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
data-service pom.xml
data-service o projeto está liberando 1.0-SNAPSHOT para cada alteração menor.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>data-service</groupId>
<artifactId>data-service</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
Embora, no caso de SNAPSHOT, o Maven busque automaticamente o SNAPSHOT mais recente diariamente, você pode forçar o maven a fazer o download da construção de instantâneo mais recente usando o switch -U para qualquer comando maven.
mvn clean package -U
Vamos abrir o console de comando, vá para o C:\ > MVN > app-ui diretório e execute o seguinte mvn comando.
C:\MVN\app-ui>mvn clean package -U
O Maven começará a construir o projeto após fazer o download do último SNAPSHOT do serviço de dados.
[INFO] Scanning for projects...
[INFO]--------------------------------------------
[INFO] Building consumerBanking
[INFO] task-segment: [clean, package]
[INFO]--------------------------------------------
[INFO] Downloading data-service:1.0-SNAPSHOT
[INFO] 290K downloaded.
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory C:\MVN\app-ui\target
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\main\resources
[INFO] [compiler:compile {execution:default-compile}]
[INFO] Compiling 1 source file to C:\MVN\app-ui\target\classes
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to C:\MVN\app-ui\target\test-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\app-ui\target\
surefire-reports
--------------------------------------------------
T E S T S
--------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-ui\target\
app-ui-1.0-SNAPSHOT.jar
[INFO]--------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]--------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: 2015-09-27T12:30:02+05:30
[INFO] Final Memory: 16M/89M
[INFO]------------------------------------------------------------------------
A automação de compilação define o cenário onde o processo de compilação do (s) projeto (s) dependente (s) é iniciado depois que a compilação do projeto é concluída com êxito, a fim de garantir que os projetos dependentes sejam estáveis.
Example
Considere que uma equipe está desenvolvendo um projeto bus-core-api em que dois outros projetos app-web-ui e app-desktop-ui são dependentes.
app-web-ui projeto está usando 1.0-SNAPSHOT de bus-core-api projeto.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>app-web-ui</groupId>
<artifactId>app-web-ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
app-desktop-ui projeto está usando 1.0-SNAPSHOT de bus-core-api projeto.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>app_desktop_ui</groupId>
<artifactId>app_desktop_ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>app_desktop_ui</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>bus_core_api</groupId>
<artifactId>bus_core_api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>C:\MVN\bus_core_api\target\bus_core_api-1.0-SNAPSHOT.jar</systemPath>
</dependency>
</dependencies>
</project>
bus-core-api projeto -
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>bus_core_api</groupId>
<artifactId>bus_core_api</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
</project>
Agora, equipes de app-web-ui e app-desktop-ui projetos exigem que seu processo de construção seja iniciado sempre que bus-core-api mudanças no projeto.
Usando instantâneo, garante que o mais recente bus-core-api projeto deve ser usado, mas para atender aos requisitos acima, precisamos fazer algo extra.
Podemos proceder das duas maneiras a seguir -
Adicione uma meta pós-construção no bus-core-api pom para dar o pontapé inicial app-web-ui e app-desktop-ui constrói.
Use um servidor de integração contínua (CI) como o Hudson para gerenciar a automação de construção automaticamente.
Usando Maven
Atualizar bus-core-api projeto pom.xml.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-invoker-plugin</artifactId>
<version>1.6</version>
<configuration>
<debug>true</debug>
<pomIncludes>
<pomInclude>app-web-ui/pom.xml</pomInclude>
<pomInclude>app-desktop-ui/pom.xml</pomInclude>
</pomIncludes>
</configuration>
<executions>
<execution>
<id>build</id>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<build>
</project>
Vamos abrir o console de comando, vá para o C:\ > MVN > bus-core-api diretório e execute o seguinte mvn comando.
>mvn clean package -U
Maven vai começar a construir o projeto bus-core-api.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building bus-core-api
[INFO] task-segment: [clean, package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\bus-core-ui\target\
bus-core-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
Uma vez bus-core-api a compilação for bem-sucedida, o Maven começará a construir o app-web-ui projeto.
[INFO] ------------------------------------------------------------------
[INFO] Building app-web-ui
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-web-ui\target\
app-web-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
Uma vez app-web-ui a compilação for bem-sucedida, o Maven começará a construir o app-desktop-ui projeto.
[INFO] ------------------------------------------------------------------
[INFO] Building app-desktop-ui
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-desktop-ui\target\
app-desktop-ui-1.0-SNAPSHOT.jar
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
Usando o Serviço de Integração Contínua com Maven
Usar um CI Server é mais preferível para desenvolvedores. Não é necessário atualizar obus-core-api projeto, cada vez que um novo projeto (por exemplo, app-mobile-ui) é adicionado, como projeto dependente de bus-core-apiprojeto. Hudsion é uma ferramenta de integração contínua escrita em java, que em um contêiner de servlet, como Apache tomcat e servidor de aplicativos glassfish. Hudson gerencia automaticamente a automação de build usando o gerenciamento de dependência do Maven. O instantâneo a seguir definirá a função da ferramenta Hudson.
Hudson considera cada construção de projeto como um trabalho. Depois que um código de projeto é registrado no SVN (ou qualquer ferramenta de gerenciamento de código-fonte mapeada para Hudson), o Hudson inicia seu trabalho de construção e, uma vez que este trabalho seja concluído, ele inicia outros trabalhos dependentes (outros projetos dependentes) automaticamente.
No exemplo acima, quando bus-core-uio código-fonte é atualizado em SVN, Hudson inicia sua construção. Uma vez que a compilação é bem-sucedida, Hudson procura por projetos dependentes automaticamente e começa a construirapp-web-ui e app-desktop-ui projetos.
Um dos principais recursos do Maven é o gerenciamento de dependências. Gerenciar dependências é uma tarefa difícil, uma vez que temos de lidar com projetos de vários módulos (consistindo em centenas de módulos / subprojetos). O Maven fornece um alto grau de controle para gerenciar tais cenários.
Descoberta de dependências transitivas
Quase sempre é um caso, quando uma biblioteca, digamos A, depende de outra biblioteca, digamos B. No caso de outro projeto C querer usar A, então esse projeto requer o uso da biblioteca B também.
O Maven ajuda a evitar tais requisitos para descobrir todas as bibliotecas necessárias. O Maven faz isso lendo arquivos de projeto (pom.xml) de dependências, descobrindo suas dependências e assim por diante.
Precisamos apenas definir a dependência direta em cada pom do projeto. O Maven cuida do resto automaticamente.
Com dependências transitivas, o gráfico das bibliotecas incluídas pode crescer rapidamente em grande extensão. Podem surgir casos quando há bibliotecas duplicadas. O Maven fornece poucos recursos para controlar a extensão das dependências transitivas.
Sr. Não. | Recurso e descrição |
---|---|
1 | Dependency mediation Determina qual versão de uma dependência deve ser usada quando várias versões de um artefato são encontradas. Se duas versões de dependências estiverem na mesma profundidade na árvore de dependências, a primeira dependência declarada será usada. |
2 | Dependency management Especifique diretamente as versões dos artefatos a serem usados quando forem encontrados em dependências transitivas. Para um exemplo de projeto, C pode incluir B como uma dependência em sua seção de gerenciamento de dependências e controlar diretamente qual versão de B deve ser usada sempre que for referenciada. |
3 | Dependency scope Inclui dependências de acordo com o estágio atual da construção. |
4 | Excluded dependencies Qualquer dependência transitiva pode ser excluída usando o elemento "exclusão". Como exemplo, A depende de B e B depende de C, então A pode marcar C como excluído. |
5 | Optional dependencies Qualquer dependência transitiva pode ser marcada como opcional usando o elemento "opcional". Como exemplo, A depende de B e B depende de C. Agora, B marcou C como opcional. Então A não usará C. |
Escopo de Dependência
A descoberta de dependências transitivas pode ser restringida usando vários Escopos de dependência, conforme mencionado abaixo.
Sr. Não. | Escopo e descrição |
---|---|
1 | compile Este escopo indica que a dependência está disponível no caminho de classe do projeto. É o escopo padrão. |
2 | provided Este escopo indica que a dependência deve ser fornecida pelo JDK ou Web-Server / Container no tempo de execução. |
3 | runtime Este escopo indica que a dependência não é necessária para a compilação, mas é necessária durante a execução. |
4 | test Este escopo indica que a dependência está disponível apenas para as fases de compilação e execução de teste. |
5 | system Este escopo indica que você deve fornecer o caminho do sistema. |
6 | import Este escopo é usado apenas quando a dependência é do tipo pom. Este escopo indica que o POM especificado deve ser substituído pelas dependências na seção <dependencyManagement> desse POM. |
Gestão de Dependências
Normalmente, temos um conjunto de projetos sob um projeto comum. Nesse caso, podemos criar um pom comum com todas as dependências comuns e, em seguida, tornar esse pom, o pai dos poms do subprojeto. O exemplo a seguir ajudará você a entender esse conceito.
A seguir estão os detalhes do gráfico de dependência acima -
- App-UI-WAR depende de App-Core-lib e App-Data-lib.
- Root é pai de App-Core-lib e App-Data-lib.
- Root define Lib1, lib2, Lib3 como dependências em sua seção de dependências.
App-UI-WAR
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-UI-WAR</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Core-lib</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Data-lib</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
App-Core-lib
<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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Root</artifactId>
<groupId>com.companyname.groupname</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Core-lib</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
</project>
App-Data-lib
<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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Root</artifactId>
<groupId>com.companyname.groupname</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Data-lib</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
</project>
Root
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.groupname</groupId>
<artifactId>Root</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>com.companyname.groupname1</groupId>
<artifactId>Lib1</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.companyname.groupname2</groupId>
<artifactId>Lib2</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.companyname.groupname3</groupId>
<artifactId>Lib3</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
</project>
Agora, quando construirmos o projeto App-UI-WAR, o Maven descobrirá todas as dependências percorrendo o gráfico de dependências e construirá o aplicativo.
Com o exemplo acima, podemos aprender os seguintes conceitos-chave -
Dependências comuns podem ser colocadas em um único lugar usando o conceito de pom pai. Dependências deApp-Data-lib e App-Core-libprojeto estão listados no projeto Root (consulte o tipo de pacote de Root. É POM).
Não há necessidade de especificar Lib1, lib2, Lib3 como dependência em App-UI-WAR. Maven usa oTransitive Dependency Mechanism para gerenciar esses detalhes.
No desenvolvimento do projeto, normalmente um processo de implantação consiste nas seguintes etapas -
Faça check-in do código de todos os projetos em andamento no SVN (sistema de controle de versão) ou repositório de código-fonte e marque-o.
Baixe o código-fonte completo do SVN.
Crie o aplicativo.
Armazene a saída de construção do arquivo WAR ou EAR em um local de rede comum.
Obtenha o arquivo da rede e implante-o no site de produção.
Atualizada a documentação com data e número da versão atualizada do aplicativo.
Declaração do Problema
Normalmente, há várias pessoas envolvidas no processo de implantação mencionado acima. Uma equipe pode lidar com o check-in do código, outra pode lidar com a construção e assim por diante. É muito provável que qualquer etapa seja perdida devido aos esforços manuais envolvidos e devido ao ambiente de várias equipes. Por exemplo, a compilação mais antiga não pode ser substituída na máquina da rede e a equipe de implantação implantou a compilação mais antiga novamente.
Solução
Automatize o processo de implantação combinando o seguinte -
- Maven, para construir e lançar projetos.
- SubVersion, repositório de código-fonte, para gerenciar o código-fonte.
- Gerenciador de repositório remoto (Jfrog / Nexus) para gerenciar binários de projeto.
Atualizar projeto POM.xml
Usaremos o plug-in Maven Release para criar um processo de lançamento automatizado.
Por exemplo: projeto bus-core-api POM.xml.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<scm>
<url>http://www.svn.com</url>
<connection>scm:svn:http://localhost:8080/svn/jrepo/trunk/
Framework</connection>
<developerConnection>scm:svn:${username}/${password}@localhost:8080:
common_core_api:1101:code</developerConnection>
</scm>
<distributionManagement>
<repository>
<id>Core-API-Java-Release</id>
<name>Release repository</name>
<url>http://localhost:8081/nexus/content/repositories/
Core-Api-Release</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.0-beta-9</version>
<configuration>
<useReleaseProfile>false</useReleaseProfile>
<goals>deploy</goals>
<scmCommentPrefix>[bus-core-api-release-checkin]-<
/scmCommentPrefix>
</configuration>
</plugin>
</plugins>
</build>
</project>
No Pom.xml, a seguir estão os elementos importantes que usamos -
Sr. Não. | Elemento e descrição |
---|---|
1 | SCM Configura o local do SVN de onde o Maven fará o check-out do código-fonte. |
2 | Repositories Local onde WAR / EAR / JAR construído ou qualquer outro artefato será armazenado após a construção do código ser bem-sucedida. |
3 | Plugin O plugin maven-release é configurado para automatizar o processo de implantação. |
Plug-in de lançamento Maven
O Maven realiza as seguintes tarefas úteis usando maven-release-plugin.
mvn release:clean
Ele limpa o espaço de trabalho caso o último processo de liberação não tenha sido bem-sucedido.
mvn release:rollback
Reverta as alterações feitas no código e na configuração do espaço de trabalho, caso o último processo de liberação não tenha sido bem-sucedido.
mvn release:prepare
Executa várias operações, como -
Verifica se há alguma alteração local não confirmada ou não.
Garante que não haja dependências SNAPSHOT.
Altera a versão do aplicativo e remove SNAPSHOT da versão para fazer a liberação.
Atualize os arquivos pom para o SVN.
Execute casos de teste.
Confirme os arquivos POM modificados.
Marque o código no subversion
Aumente o número da versão e anexe SNAPSHOT para liberação futura.
Envie os arquivos POM modificados para o SVN.
mvn release:perform
Verifica o código usando a tag definida anteriormente e executa o objetivo de implantação do Maven, para implantar o war ou construir o artefato no repositório.
Vamos abrir o console de comando, vá para o C:\ > MVN >bus-core-api diretório e execute o seguinte mvn comando.
>mvn release:prepare
Maven começará a construir o projeto. Assim que a compilação for bem-sucedida, execute o seguintemvn comando.
>mvn release:perform
Depois que a construção for bem-sucedida, você pode verificar o arquivo JAR carregado em seu repositório.
Este capítulo ensina como gerenciar um projeto baseado na web usando Maven. Aqui você aprenderá como criar / construir / implantar e executar um aplicativo da web.
Criar aplicativo da web
Para criar uma aplicação web java simples, usaremos maven-archetype-webappplugar. Então, vamos abrir o console de comando, vá para oC:\MVN diretório e execute o seguinte mvn comando.
C:\MVN>mvn archetype:generate
-DgroupId = com.companyname.automobile
-DartifactId = trucks
-DarchetypeArtifactId = maven-archetype-webapp
-DinteractiveMode = false
O Maven iniciará o processamento e criará a estrutura completa do projeto do aplicativo Java baseado na web da seguinte forma -
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] -------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Batch mode
[INFO] --------------------------------------------------------------------
[INFO] Using following parameters for creating project
from Old (1.x) Archetype: maven-archetype-webapp:1.0
[INFO] --------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.companyname.automobile
[INFO] Parameter: packageName, Value: com.companyname.automobile
[INFO] Parameter: package, Value: com.companyname.automobile
[INFO] Parameter: artifactId, Value: trucks
[INFO] Parameter: basedir, Value: C:\MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\MVN\trucks
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
[INFO] Total time: 16 seconds
[INFO] Finished at: Tue Jul 17 11:00:00 IST 2012
[INFO] Final Memory: 20M/89M
[INFO] -------------------------------------------------------------------
Agora vá para o diretório C: / MVN. Você verá um projeto de aplicativo java criado, denominado trucks (conforme especificado em artifactId) conforme especificado no instantâneo a seguir. A seguinte estrutura de diretório é geralmente usada para aplicativos da web -
O Maven usa um layout de diretório padrão. Usando o exemplo acima, podemos entender os seguintes conceitos-chave -
Sr. Não. | Estrutura e descrição da pasta |
---|---|
1 | trucks contém a pasta src e pom.xml. |
2 | src/main/webapp contém index.jsp e pasta WEB-INF. |
3 | src/main/webapp/WEB-INF contém web.xml |
4 | src/main/resources ele contém arquivos de imagens / propriedades. |
POM.xml
<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>com.companyname.automobile</groupId>
<artifactId>trucks</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>trucks Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>trucks</finalName>
</build>
</project>
Se você observar, verá que o Maven também criou um arquivo-fonte JSP de amostra.
Abrir C:\ > MVN > trucks > src > main > webapp > pasta para ver index.jsp com o seguinte código -
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
Construir aplicativo da web
Vamos abrir o console de comando, vá para o diretório C: \ MVN \ trucks e execute o seguinte mvn comando.
C:\MVN\trucks>mvn clean package
Maven começará a construir o projeto.
[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building trucks Maven Webapp
[INFO] task-segment: [clean, package]
[INFO] -------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to
copy filtered resources,i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] [compiler:compile {execution: default-compile}]
[INFO] No sources to compile
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to
copy filtered resources,i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory
C:\MVN\trucks\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] No sources to compile
[INFO] [surefire:test {execution: default-test}]
[INFO] No tests to run.
[INFO] [war:war {execution: default-war}]
[INFO] Packaging webapp
[INFO] Assembling webapp[trucks] in [C:\MVN\trucks\target\trucks]
[INFO] Processing war project
[INFO] Copying webapp resources[C:\MVN\trucks\src\main\webapp]
[INFO] Webapp assembled in[77 msecs]
[INFO] Building war: C:\MVN\trucks\target\trucks.war
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Tue Jul 17 11:22:45 IST 2012
[INFO] Final Memory: 11M/85M
[INFO] -------------------------------------------------------------------
Implantar aplicativo da web
Agora copie o trucks.war criado em C:\ > MVN > trucks > target > pasta para o diretório do webapp do servidor da web e reinicie o servidor da web.
Aplicativo da Web de teste
Execute o aplicativo da web usando o URL: http://<server-name>:<port-number>/trucks/index.jsp.
Verifique a saída.
O Eclipse fornece um excelente plugin m2eclipse que integra perfeitamente o Maven e o Eclipse.
Alguns dos recursos do m2eclipse estão listados abaixo -
Você pode executar metas Maven a partir do Eclipse.
Você pode visualizar a saída dos comandos Maven dentro do Eclipse, usando seu próprio console.
Você pode atualizar as dependências do maven com IDE.
Você pode lançar compilações Maven de dentro do Eclipse.
Ele faz o gerenciamento de dependência para o caminho de construção do Eclipse com base no pom.xml do Maven.
Ele resolve dependências Maven do espaço de trabalho do Eclipse sem instalar no repositório Maven local (requer que o projeto de dependência esteja no mesmo espaço de trabalho).
Ele faz download automaticamente das dependências e fontes necessárias dos repositórios Maven remotos.
Ele fornece assistentes para a criação de novos projetos Maven, pom.xml e para habilitar o suporte Maven em projetos existentes
Ele fornece uma busca rápida por dependências em repositórios Maven remotos.
Instalando o plugin m2eclipse
Use um dos seguintes links para instalar o m2eclipse -
Eclipse | URL |
---|---|
Eclipse 3.5 (Gallileo) | Instalando m2eclipse no Eclipse 3.5 (Gallileo) |
Eclipse 3.6 (Helios) | Instalando m2eclipse no Eclipse 3.6 (Helios) |
O exemplo a seguir ajudará você a aproveitar os benefícios da integração do Eclipse e do maven.
Importar um projeto maven no Eclipse
Abra o Eclipse.
Selecione File > Import > opção.
Selecione a opção de projetos Maven. Clique no botão Avançar.
Selecione o local do projeto, onde um projeto foi criado usando o Maven. Criamos um banco de consumidor do projeto Java nos capítulos anteriores. Vá para o capítulo 'Criando projeto Java' para ver como criar um projeto usando o Maven.
Clique no botão Concluir.
Agora, você pode ver o projeto maven em eclipse.
Agora, dê uma olhada em consumer Bankingpropriedades do projeto. Você pode ver que o Eclipse adicionou dependências Maven ao caminho de construção do java.
Agora, é hora de construir este projeto usando a capacidade maven de eclipse.
- Clique com o botão direito no projeto consumerBanking para abrir o menu de contexto.
- Selecione a opção Executar como.
- Em seguida, opção de pacote maven.
Maven começará a construir o projeto. Você pode ver a saída no Console do Eclipse da seguinte maneira -
[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building consumerBanking
[INFO]
[INFO] Id: com.companyname.bank:consumerBanking:jar:1.0-SNAPSHOT
[INFO] task-segment: [package]
[INFO] -------------------------------------------------------------------
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:testCompile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test]
[INFO] Surefire report directory:
C:\MVN\consumerBanking\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.047 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar]
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Thu Jul 12 18:18:24 IST 2012
[INFO] Final Memory: 2M/15M
[INFO] -------------------------------------------------------------------
Agora, clique com o botão direito em App.java. SelecioneRun Asopção. Então selecioneJava Application.
Você verá o resultado da seguinte forma -
Hello World!
O NetBeans 6.7 e mais recente tem suporte embutido para Maven. No caso da versão anterior, o plugin Maven está disponível no gerenciador de plugin. Estamos usando o NetBeans 6.9 neste exemplo.
Alguns dos recursos do NetBeans estão listados abaixo -
Você pode executar metas do Maven a partir do NetBeans.
Você pode visualizar a saída dos comandos Maven dentro do NetBeans usando seu próprio console.
Você pode atualizar as dependências do maven com IDE.
Você pode iniciar compilações do Maven de dentro do NetBeans.
O NetBeans faz o gerenciamento de dependências automaticamente com base no pom.xml do Maven.
O NetBeans resolve dependências Maven de seu espaço de trabalho sem instalar no repositório Maven local (requer que o projeto de dependência esteja no mesmo espaço de trabalho).
Os downloads automáticos do NetBeans requerem dependências e fontes dos repositórios Maven remotos.
O NetBeans fornece assistentes para a criação de novos projetos Maven, pom.xml.
O NetBeans fornece um navegador de repositório Maven que permite que você visualize seu repositório local e repositórios Maven externos registrados.
O exemplo a seguir ajudará você a aproveitar os benefícios da integração do NetBeans e do Maven.
Abra um projeto maven no NetBeans
Abra o NetBeans.
Selecione File Menu > Open Project opção.
Selecione o local do projeto, onde um projeto foi criado usando o Maven. Criamos um consumerBanking do Projeto Java. Vá para o capítulo 'Criando projeto Java' para ver como criar um projeto usando o Maven.
Agora, você pode ver o projeto maven no NetBeans. Dê uma olhada nas Bibliotecas do projeto consumerBanking e nas Bibliotecas de Teste. Você pode ver que o NetBeans adicionou dependências Maven ao seu caminho de construção.
Construir um projeto maven no NetBeans
Agora, é hora de construir este projeto usando a capacidade maven do NetBeans.
- Clique com o botão direito no projeto consumerBanking para abrir o menu de contexto.
- Selecione Limpar e construir como opção.
Maven começará a construir o projeto. Você pode ver a saída no NetBeans Console da seguinte maneira -
NetBeans: Executing 'mvn.bat -Dnetbeans.execution = true clean install'
NetBeans: JAVA_HOME = C:\Program Files\Java\jdk1.6.0_21
Scanning for projects...
------------------------------------------------------------------------
Building consumerBanking
task-segment: [clean, install]
------------------------------------------------------------------------
[clean:clean]
[resources:resources]
[WARNING] Using platform encoding (Cp1252 actually)
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:\MVN\consumerBanking\src\main\resources
[compiler:compile]
Compiling 2 source files to C:\MVN\consumerBanking\target\classes
[resources:testResources]
[WARNING] Using platform encoding (Cp1252 actually)
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:\MVN\consumerBanking\src\test\resources
[compiler:testCompile]
Compiling 1 source file to C:\MVN\consumerBanking\target\test-classes
[surefire:test]
Surefire report directory: C:\MVN\consumerBanking\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.023 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[jar:jar]
Building jar: C:\MVN\consumerBanking\target\consumerBanking-1.0-SNAPSHOT.jar
[install:install]
Installing C:\MVN\consumerBanking\target\consumerBanking-1.0-SNAPSHOT.jar
to C:\Users\GB3824\.m2\repository\com\companyname\bank\consumerBanking\
1.0-SNAPSHOT\consumerBanking-1.0-SNAPSHOT.jar
------------------------------------------------------------------------
BUILD SUCCESSFUL
------------------------------------------------------------------------
Total time: 9 seconds
Finished at: Thu Jul 19 12:57:28 IST 2012
Final Memory: 16M/85M
------------------------------------------------------------------------
Executar aplicativo no NetBeans
Agora, clique com o botão direito em App.java. SelecioneRun Filecomo opção. Você verá o resultado no NetBeans Console.
NetBeans: Executing 'mvn.bat -Dexec.classpathScope = runtime
-Dexec.args = -classpath %classpath com.companyname.bank.App
-Dexec.executable = C:\Program Files\Java\jdk1.6.0_21\bin\java.exe
-Dnetbeans.execution = true process-classes
org.codehaus.mojo:exec-maven-plugin:1.1.1:exec'
NetBeans: JAVA_HOME = C:\Program Files\Java\jdk1.6.0_21
Scanning for projects...
------------------------------------------------------------------------
Building consumerBanking
task-segment: [process-classes,
org.codehaus.mojo:exec-maven-plugin:1.1.1:exec]
------------------------------------------------------------------------
[resources:resources]
[WARNING] Using platform encoding (Cp1252 actually)
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:\MVN\consumerBanking\src\main\resources
[compiler:compile]
Nothing to compile - all classes are up to date
[exec:exec]
Hello World!
------------------------------------------------------------------------
BUILD SUCCESSFUL
------------------------------------------------------------------------
Total time: 1 second
Finished at: Thu Jul 19 14:18:13 IST 2012
Final Memory: 7M/64M
------------------------------------------------------------------------
IntelliJ IDEA possui suporte integrado para Maven. Estamos usando o IntelliJ IDEA Community Edition 11.1 neste exemplo.
Alguns dos recursos do IntelliJ IDEA estão listados abaixo -
Você pode executar metas Maven a partir do IntelliJ IDEA.
Você pode visualizar a saída dos comandos Maven dentro do IntelliJ IDEA usando seu próprio console.
Você pode atualizar as dependências do maven no IDE.
Você pode iniciar compilações Maven de dentro do IntelliJ IDEA.
O IntelliJ IDEA faz o gerenciamento de dependências automaticamente com base no pom.xml do Maven.
O IntelliJ IDEA resolve dependências Maven de seu espaço de trabalho sem instalar no repositório Maven local (requer que o projeto de dependência esteja no mesmo espaço de trabalho).
O IntelliJ IDEA baixa automaticamente as dependências e fontes necessárias dos repositórios Maven remotos.
O IntelliJ IDEA fornece assistentes para a criação de novos projetos Maven, pom.xml.
O exemplo a seguir ajudará você a aproveitar os benefícios da integração do IntelliJ IDEA e do Maven.
Crie um novo projeto no IntelliJ IDEA
Vamos importar o projeto Maven usando o New Project Wizard.
Abra o IntelliJ IDEA.
Selecione File Menu > New Project Opção.
Selecione importar projeto do modelo existente.
- Selecione a opção Maven
Selecione o local do projeto, onde um projeto foi criado usando o Maven. Criamos um consumerBanking do Projeto Java. Vá para o capítulo 'Criando projeto Java' para ver como criar um projeto usando o Maven.
- Selecione o projeto Maven para importar.
- Insira o nome do projeto e clique em Concluir.
Agora, você pode ver o projeto maven no IntelliJ IDEA. Dê uma olhada nas bibliotecas externas do projeto consumerBanking. Você pode ver que o IntelliJ IDEA adicionou dependências Maven ao seu caminho de construção na seção Maven.
Construir um projeto maven no IntelliJ IDEA
Agora, é hora de construir este projeto usando a capacidade do IntelliJ IDEA.
Selecione o projeto consumerBanking.
Selecione Buid menu > Rebuild Project Opção
Você pode ver a saída no Console do IntelliJ IDEA
4:01:56 PM Compilation completed successfully
Execute o aplicativo no IntelliJ IDEA
Selecione o projeto consumerBanking.
Clique com o botão direito em App.java para abrir o menu de contexto.
selecionar Run App.main()
Você verá o resultado no Console do IntelliJ IDEA.
"C:\Program Files\Java\jdk1.6.0_21\bin\java"
-Didea.launcher.port=7533
"-Didea.launcher.bin.path=
C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 11.1.2\bin"
-Dfile.encoding=UTF-8
-classpath "C:\Program Files\Java\jdk1.6.0_21\jre\lib\charsets.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\deploy.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\javaws.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\jce.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\jsse.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\management-agent.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\plugin.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\resources.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\rt.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\dnsns.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\localedata.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunjce_provider.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunmscapi.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunpkcs11.jar
C:\MVN\consumerBanking\target\classes;
C:\Program Files\JetBrains\
IntelliJ IDEA Community Edition 11.1.2\lib\idea_rt.jar"
com.intellij.rt.execution.application.AppMain com.companyname.bank.App
Hello World!
Process finished with exit code 0