O plugin Dependency, é utilizado para quando queremos copiar os jars que a aplicação depende para ser executada, sem que para isso tenhamos que ficar copiando arquivo por arquivo.
A utilização desse plugin é bem simples, vamos fazer o download do projeto de exemplo para que possamos fazer as configurações necessárias para utilizar o plugin.
Assim que você fizer o download do exemplo, vamos editar o pom.xml e configurar o plugin. Ao abrir o pom.xml você verá:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>br.com.javadev.dependency</groupId> <artifactId>dependency-jar</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>Dependency Projetc Example</name> <url>www.javadev.com.br</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <finalName>${project.artifactId}-${project.version}</finalName> </build> </project>
1 - Configurando o plugin
Para configurar um plugin dentro do projeto, adicionar dentro da tag build
<build> <finalName>${project.artifactId}-${project.version}</finalName> ... </build> </project>
Antes de configurar o plugin vamos fazer um teste para ver qual o objetivo desse plugin. Acessar a pasta do projeto e digitar o comando:
mvn package
Assim que o build finalizar, abrir a pasta target gerada como resultado do comando acima, e vc verá algo parecido com
Agora, vamos adicionar a configuração do plugin dependency
<plugins> <plugin> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>target/lib</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins>
Em seguida, também precisamos adicionar uma dependência para que o plugin copie para nós na pasta configurada na tag outputDirectory do exemplo acima.
<dependencies> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.5</version> </dependency> </dependencies>
O pom.xml do projeto vai ficar assim:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>br.com.javadev.dependency</groupId> <artifactId>dependency-jar</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>Dependency Projetc Example</name> <url>www.javadev.com.br</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <finalName>${project.artifactId}-${project.version}</finalName> <plugins> <plugin> <artifactId>maven-dependency-plugin</artifactId> <configuration> <outputDirectory>target/lib</outputDirectory> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.5</version> </dependency> </dependencies> </project>
2 - Efetuando os testes
Para que vejamos o resultado final da execução do plugin, vamos executar novamente o comando:
mvn package
Se visualizamos novamente o conteúdo da pasta target, veremos que será criada uma pasta nova pasta, lib, e se você verificar o conteúdo dela, teremos todos os arquivos que estão declarados como dependência do projeto.
Ao acessarmos a pasta lib, vemos que o arquivo commons-lang-2.5.jar está dentro da pasta, o mesmo que configuramos como dependência do projeto
3 - Entendendo o a configuração
Dois pontos que precisamos entender na configuração do plugin são:
1 - O plugin é executado no ciclo de vida default do Build, na fase package, onde é executado o goal copy-dependencies do plugin
2 - Dentro do bloco executions, configuramos na tag outputDirectory onde será colocado as dependências declaradas do projeto
4 - Entendendo como funciona o conceito de Fase do ciclo de vida do projeto
Vamos fazer um mudança na configuração do Dependency plugin, vamos desabilitar o bloco executions, deixando da seguinte forma:
<build> <finalName>${project.artifactId}-${project.version}</finalName> <plugins> <plugin> <artifactId>maven-dependency-plugin</artifactId> <configuration> <outputDirectory>target/lib</outputDirectory> </configuration> <!--executions> <execution> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions--> </plugin> </plugins> </build>
Agora vamos fazer o seguinte, limpar o projeto e compilar novamente
mvn clean package
A pasta target será removida e criada novamente, porém se você observer a pasta lib não será copiada, o que aconteceu é que quando comentamos o bloco executions o plugin deixou de ser executado na fase de package, agora ele somente está configurado. O que podemos fazer agora é executar o goal copy-dependencies, diretamente na linha de comando, digitando:
mvn dependency:copy-dependencies
Se olharmos o conteúdo da pasta target agora, veremos que a pasta lib foi criada e a dependência copiada para ela.
5 - Conclusão
Vemos nesse exemplo que não há muito segredo na configuração de projetos maven, precisamos entender alguns conceitos para configurar os plugins da forma que melhor nos atenda. Vamos nos próximos tutoriais complementar os projetos com outros recursos e ver muitas das possibilidades de configuração que podemos fazer com o maven.