Dependency Plugin


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

Dependency Plugin

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.

Dependency Plugin Resultado

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

Dependency Plugin Lib

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.