2.1 plug-in de recursos de cópia maven-resources-plugin
Se você estiver construindo um aplicativo da Web, terá apenas vários recursos diferentes nele. Estas são bibliotecas jar, servlets jsp, arquivos de configurações. E, claro, este é um monte de arquivos estáticos como html
, css
, js
, bem como várias imagens.
Por padrão, ao criar um projeto, o Maven simplesmente copia todos os seus arquivos da pasta src/main/resources
para o diretório de destino. Se você deseja fazer alterações nesse comportamento, o plug-in o ajudará maven-resources-plugin
.
Exemplo de código para tal plugin:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
${basedir}/target/resources
</outputDirectory>
<resources>
<resource> instructions for copying a resource 1 </resource>
<resource> instructions for copying a resource 2 </resource>
<resource> instructions for copying a resource N </resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Este plugin será chamado durante a fase de validação. Usando a tag, <outputDirectory>
você pode definir o diretório onde o plug-in deve copiar os recursos especificados no arquivo <resources>
. E é aqui que o plugin pode se desdobrar com toda a sua força.
2.2 Filtrando recursos com o plug-in maven-resources
Os recursos do plug-in podem ser especificados não apenas na forma de arquivos, mas imediatamente na forma de diretórios. Além disso, uma máscara pode ser adicionada ao diretório, que especifica quais arquivos dele serão incluídos neste recurso.
Exemplo:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
</resource>
Dois asteriscos como máscara representam qualquer número de diretórios . No exemplo acima, todos os arquivos png contidos no diretório src/main/resources/images
(e seus subdiretórios) serão considerados como dados de recursos.
Se você deseja excluir alguns arquivos, pode usar a extensão exclude
. Exemplo:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
<excludes>
<exclude>old/*.png</exclude>
</excludes>
</resource>
As tags são aplicadas sequencialmente: primeiro, os arquivos de inclusão especificados nos arquivos de inclusão serão adicionados ao recurso e, em seguida, os arquivos de exclusão serão excluídos desta lista.
Mas isso não é tudo. O plugin pode olhar dentro dos arquivos (se forem texto, é claro). E, por exemplo, adicione application.properties
a versão necessária do assembly ao arquivo. Para que o plug-in processe o conteúdo do arquivo, você precisa especificar o parâmetro <filtering>true</filtering>
.
Exemplo:
<resource>
<directory>src/main/resources/properties</directory>
<filtering>true</filtering>
<includes>
<include>**/*. properties </include>
</includes>
</resource>
Mais detalhes sobre este plugin podem ser encontrados no link: https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
2.3 plug-in de inclusão de fonte maven-source-plugin
Outro plug-in útil - maven-source-plugin
permite incluir o código-fonte de seus arquivos java no assembly. Para que?
O fato é que, além dos aplicativos da web, um número muito grande de bibliotecas é montado usando o Maven. Muitos projetos Java seguem o conceito de código aberto e são distribuídos para a comunidade Java com seus próprios fontes.
Por que você precisa de um plugin separado? Por que você não pode simplesmente copiar a fonte e pronto?
Primeiro, em qualquer projeto complexo, as fontes podem ser armazenadas em vários locais.
Em segundo lugar, a geração de fontes com base em especificações xml é frequentemente usada; essas fontes também precisam ser incluídas na montagem.
E em terceiro lugar, você pode decidir não incluir nenhum arquivo especialmente secreto em sua montagem.
Um exemplo de uso do plugin maven-source-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
2.4 plug-in de cópia de dependência maven-dependency-plugin
Você também pode precisar copiar dependências (bibliotecas) de maneira inteligente ao criar um projeto. Um plug-in é usado para isso maven-dependency-plugin
.
Exemplo:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
Neste exemplo, o comportamento padrão do plug-in é escrito - copiando bibliotecas para o arquivo ${project.build.directory}/lib
.
A seção de execução informa que o plug-in será chamado durante a fase de construção - pacote, meta - dependências de cópia.
Em geral, este plugin tem um conjunto bastante grande de objetivos, aqui estão os mais populares:
1 | dependência:analisar | análise de dependência (usado, não utilizado, especificado, não especificado) |
2 | dependency:analyze-duplicate | identificando dependências duplicadas |
3 | dependência: resolver | resolução (definição) de todas as dependências |
4 | dependência: resolve-plugin | permissão (definição) de todos os plugins |
5 | dependência:árvore | exibindo a árvore de dependências |
Você também pode definir parâmetros adicionais na seção de configuração:
1 | diretório de saída | Diretório onde as dependências serão copiadas |
2 | overWriteReleases | Sinalize para substituir dependências ao criar uma versão |
3 | overWriteSnapshots | Sinalizador para sobrescrever dependências não terminais que possuem SNAPSHOT |
4 | overWriteIfNewer | Sinalize para substituir bibliotecas por versões mais recentes |
Exemplo:
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
Por padrão <overWriteReleases>
, e <overWriteSnapshots>
é falso, pois <overWriteIfNewer>
é verdadeiro.
GO TO FULL VERSION