1.1 Lista de plugins para construir no Maven
A montagem no Maven pode ser configurada de forma muito flexível. Os desenvolvedores do Maven criaram dezenas de plug-ins especialmente, usando os quais você pode configurar várias compilações com muita flexibilidade. Os mais populares deles são mostrados na tabela abaixo:
plugar | Descrição | |
---|---|---|
1 | maven-compiler-plugin | Gerencia a compilação Java |
2 | maven-resources-plugin | Controla a inclusão de recursos em um assembly |
3 | plug-in fonte maven | Controla se o código-fonte está incluído em um assembly |
4 | plugin-dependência-maven | Controla o processo de cópia de bibliotecas de dependência |
5 | maven-jar-plugin | Plugin para criar arquivo jar final |
6 | plug-in de guerra maven | Plugin para criar o arquivo war final |
7 | maven-surefire-plugin | Gerencia execuções de teste |
8 | buildnumber-maven-plugin | Gera um número de compilação |
Cada plugin é interessante à sua maneira, mas teremos que analisá-los todos. Vamos começar com o principal - o plug-in de gerenciamento de compilação.
1.2 Plugin de compilação maven-compiler-plugin
O plugin mais popular que permite controlar a versão do compilador e é usado em quase todos os projetos é o maven-compiler-plugin
. Possui configurações padrão, mas em quase todos os projetos elas precisam ser definidas novamente.
Na versão mais simples, no plug-in, você precisa especificar a versão do código-fonte Java e a versão da máquina Java sob a qual a montagem é realizada:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.11</source>
<target>1.13</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
No exemplo acima, definimos três opções do compilador Java: source
, target
e encoding
.
O parâmetro source
nos permite definir a versão do Java para nossas fontes. O parâmetro target
é a versão da máquina Java sob a qual você deseja compilar as classes. Se nenhum código ou versão da máquina Java for especificado, o padrão será 1.3
Por fim, o parâmetro encoding
permite especificar a codificação dos arquivos Java. Nós indicamos UTF-8
. Agora quase todas as fontes são armazenadas em UTF-8
. Mas se este parâmetro não for especificado, a codificação atual do sistema operacional será selecionada. Para Windows, esta é a codificação Windows-1251
.
Existem também casos em que o computador de construção possui várias versões do Java instaladas: para construir diferentes módulos e/ou diferentes projetos. Neste caso, JAVA_HOME
apenas o caminho para um deles pode ser especificado na variável.
Além disso, existem diferentes implementações da máquina Java: OpenJDK, OracleJDK, Amazon JDK. E quanto maior o projeto, mais complexa sua estrutura. Mas você pode definir explicitamente o caminho para o compilador javac para o plug-in usando a tag
O plugin maven-compiler-plugin
tem dois objetivos:
compiler:compile
– compilação de fontes, por padrão associada à fase de compilaçãocompiler:testCompile
– compilação de testes, por padrão está associada à fase de compilação de teste.
Você também pode especificar uma lista de argumentos a serem passados para o compilador javac na linha de comando:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<compilerArgs>
<arg>-verbose</arg>
<arg>-Xlint:all,-options,-path<arg>
</compilerArgs>
</configuration>
</plugin>
1.3 Plugin para criar arquivo jar maven-jar-plugin
Se você quiser construir sua própria biblioteca jar com Maven, você precisará do maven-jar-plugin. Este plugin faz muitas coisas úteis.
Um exemplo de tal plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<includes>
<include>**/properties/*</include>
</includes>
<archive>
<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
Primeiro, pode ser usado para especificar quais arquivos entrarão na biblioteca e quais não. Usando tags <include>
na seção, <includes>
você pode especificar uma lista de diretórios cujo conteúdo precisa ser adicionado à biblioteca .
Em segundo lugar, cada jar deve ter um manifesto ( arquivo MANIFEST.MF ). O próprio plug-in irá colocá-lo no lugar certo na biblioteca, você só precisa especificar qual caminho seguir. A tag é usada para isso <manifestFile>
.
Por fim, o plug-in pode gerar um manifesto por conta própria. Para fazer isso, em vez de uma tag, <manifestFile>
você precisa adicionar uma tag <manifest>
e especificar dados para o futuro manifesto nela. Exemplo:
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.codegym.MainApplication</mainClass>
</manifest>
</archive>
</configuration>
A tag <addClasspath>
especifica se deseja adicionar ao manifesto CLASSPATH
.
A tag <classpathPrefix>
permite adicionar um prefixo (no exemplo lib) antes de cada recurso. Especificar um prefixo em <classpathPrefix>
permite que você coloque as dependências em uma pasta separada.
Sim, você pode colocar bibliotecas dentro de outra biblioteca. E há muitas surpresas esperando por você quando precisar passar o caminho para o arquivo de propriedades em algum lugar, que está na biblioteca jar, que está na biblioteca jar.
Por fim, a tag <mainClass>
aponta para a classe executável principal. “Qual é a classe executável principal? ", - você pergunta. E o fato é que uma máquina Java pode executar um programa especificado não apenas por uma classe Java, mas também por um arquivo jar. E é para este caso que a classe inicial principal é necessária.
1.4 Plug-in de geração de número de compilação buildnumber-maven-plugin
Muitas vezes, bibliotecas jar e arquivos war incluem informações com o nome do projeto e sua versão, bem como a versão do assembly. Isso não é apenas útil para gerenciar dependências, mas também simplifica o teste: fica claro em qual versão da biblioteca o erro foi corrigido e em qual ele foi adicionado.
Na maioria das vezes, essa tarefa é resolvida assim - eles criam um arquivo especial application.properties
que contém todas as informações necessárias e o incluem na montagem. Você também pode configurar o script de construção para que os dados desse arquivo migrem para MANIFEST.MF
etc.
Mas o mais interessante é que o Maven possui um plug-in especial que pode gerar esse arquivo application.properties. Para fazer isso, você precisa criar esse arquivo e preenchê-lo com modelos de dados especiais. Exemplo:
# application.properties
app.name=${pom.name}
app.version=${pom.version}
app.build=${buildNumber}
Os valores de todos os três parâmetros serão substituídos no estágio de construção.
Parâmetros pom.name
e pom.version
serão obtidos diretamente de pom.xml
. E para gerar um número de compilação exclusivo no Maven, existe um plug-in especial - buildnumber-maven-plugin
. Veja exemplo abaixo:
<packaging>war</packaging>
<version>1.0</version>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<revisionOnScmFailure>true</revisionOnScmFailure>
<format>{0}-{1,date,yyyyMMdd}</format>
<items>
<item>${project.version}</item>
<item>timestamp</item>
</items>
</configuration>
</plugin>
</plugins>
No exemplo acima, três coisas importantes acontecem. Primeiro, o próprio plug-in é especificado para definir a versão do assembly . Em segundo lugar, é especificado que ele será executado durante a fase de validação (a primeira fase) e gerará um número de compilação - ${buildNumber}
.
E em terceiro lugar, é indicado o formato desse número de montagem, que é colado de várias partes . Esta é a versão do projeto project.version
e a hora atual fornecida pelo modelo. O formato do modelo é especificado pela classe Java MessageFormat
.
GO TO FULL VERSION