Maven Compiler Plugin

Maven Compiler Plugin

1. Visão geral

Este tutorial rápido apresenta o plug-incompiler, um dos plug-ins principais da ferramenta de construção Maven.

Para uma visão geral dos outros plug-ins principais, consultethis article.

2. Objetivos do plugin

The compiler plugin is used to compile the source code of a Maven project. Este plug-in tem dois objetivos, que já estão vinculados a fases específicas do ciclo de vida padrão:

  • compile compila os principais arquivos fonte

  • testCompile compila os arquivos fonte de teste

Aqui está o plugincompiler no POM:


    maven-compiler-plugin
    3.7.0
    
        ...
    

Podemos encontrar a versão mais recente deste pluginhere.

3. Configuração

By default, the compiler plugin compiles source code compatible with Java 5, and the generated classes also work with Java 5 regardless of the JDK in use. Podemos modificar essas configurações no elementoconfiguration:


    1.8
    1.8
    <-- other customizations -->

Por conveniência, podemos definir a versão Java como propriedades do POM:


    1.8
    1.8

Às vezes, queremos passar argumentos para o compiladorjavac. É aqui que o parâmetrocompilerArgs é útil.

Por exemplo, podemos especificar a seguinte configuração para o compilador avisar sobre operações não verificadas:


    
    
        -Xlint:unchecked
    

Ao compilar esta classe:

public class Data {
    List textList = new ArrayList();

    public void addText(String text) {
        textList.add(text);
    }

    public List getTextList() {
        return this.textList;
    }
}

veremos um aviso não verificado no console:

[WARNING] ... Data.java:[7,29] unchecked conversion
  required: java.util.List
  found:    java.util.ArrayList

Como os dois objetivos do plugincompiler são automaticamente vinculados às fases do ciclo de vida padrão do Maven, podemos executar esses objetivos com os comandosmvn compileemvn test-compile.

4. Atualizações do Java 9

4.1. Configuração

Até o Java 8, usávamos o número da versão como 1.x, ondex representa a versão do Java, como 1.8 para o Java 8.

Para Java 9 e superior, podemos apenas usar o número da versão diretamente:


    9
    9

Da mesma forma, podemos definir a versão usandoproperties como:


    9
    9

Maven adicionou seu suporte para Java 9 em3.5.0,, portanto, precisaremos pelo menos dessa versão. Também precisaremos de pelo menos3.8.0 dethe maven-compiler-plugin:


    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.8.0
            
                9
                9
            
        
    

4.2. Construir

Agora é hora de testar nossa configuração.

Primeiro, vamos criar uma classeMavenCompilerPlugin na qual estamos importando um pacotefrom another module.

Um simples éjavax.xml.XMLConstants.XML_NS_PREFIX:

public class MavenCompilerPlugin {
    public static void main(String[] args) {
        System.out.println("The XML namespace prefix is: "
          + XML_NS_PREFIX);
    }
}

A seguir, vamos compilá-lo:

mvn -q clean compile exec:java
  -Dexec.mainClass="com.example.maven.java9.MavenCompilerPlugin"

Ao usar os padrões do Java 9, porém, obteremos um erro:

[ERROR] COMPILATION ERROR :
[ERROR] .../MavenCompilerPlugin.java:[3,20]
  package javax.xml is not visible
  (package javax.xml is declared in module java.xml,
  but module com.example.maven.java9 does not read it)
[ERROR] .../MavenCompilerPlugin.java:[3,1]
  static import only from classes and interfaces
[ERROR] .../MavenCompilerPlugin.java:[7,62]
  cannot find symbol
symbol:   variable XML_NS_PREFIX
location: class com.example.maven.java9.MavenCompilerPlugin

O erro vem do fato de que este pacote está em um módulo separado que ainda não incluímos em nossa compilação.

A maneira mais simples de resolver isso é criando a classea module-info.java e indicando que precisamos do módulojava.xml:

module com.example.maven.java9 {
    requires java.xml;
}

Agora podemos tentar novamente:

mvn -q clean compile exec:java
  -Dexec.mainClass="com.example.maven.java9.MavenCompilerPlugin"

E nossa saída será:

The XML namespace prefix is: xml

5. Conclusão

Neste artigo, examinamos o plugincompiler e descrevemos como usá-lo. Também aprendemos sobre o suporte do Maven para Java 9.

O código-fonte completo deste tutorial pode ser encontradoover on GitHub.