Maven Compiler Plugin

Plugin de compilation Maven

1. Vue d'ensemble

Ce rapide tutoriel présente le plugincompiler, l'un des principaux plugins de l'outil de construction Maven.

Pour un aperçu des autres plugins principaux, reportez-vous àthis article.

2. Objectifs du plugin

The compiler plugin is used to compile the source code of a Maven project. Ce plugin a deux objectifs, qui sont déjà liés à des phases spécifiques du cycle de vie par défaut:

  • compile compile les fichiers sources principaux

  • testCompile compile les fichiers source de test

Voici le plugincompiler dans le POM:


    maven-compiler-plugin
    3.7.0
    
        ...
    

Nous pouvons trouver la dernière version de ce pluginhere.

3. Configuration

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. Nous pouvons modifier ces paramètres dans l'élémentconfiguration:


    1.8
    1.8
    <-- other customizations -->

Pour plus de commodité, nous pouvons définir la version Java en tant que propriétés du POM:


    1.8
    1.8

Parfois, nous voulons passer des arguments au compilateurjavac. C'est là que le paramètrecompilerArgs est utile.

Par exemple, nous pouvons spécifier la configuration suivante pour que le compilateur avertisse des opérations non contrôlées:


    
    
        -Xlint:unchecked
    

Lors de la compilation de cette classe:

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

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

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

nous verrons un avertissement non coché sur la console:

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

Comme les deux objectifs du plugincompiler sont automatiquement liés à des phases du cycle de vie par défaut de Maven, nous pouvons exécuter ces objectifs avec les commandesmvn compile etmvn test-compile.

4. Mises à jour Java 9

4.1. Configuration

Jusqu'à Java 8, nous utilisions le numéro de version 1.xx représente la version de Java, comme 1.8 pour Java 8.

Pour Java 9 et supérieur, nous pouvons simplement utiliser le numéro de version directement:


    9
    9

De même, nous pouvons définir la version en utilisantproperties comme:


    9
    9

Maven a ajouté sa prise en charge de Java 9 dans3.5.0,, nous aurons donc besoin d'au moins cette version. Nous aurons également besoin d'au moins3.8.0 dethe maven-compiler-plugin:


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

4.2. Construire

Il est maintenant temps de tester notre configuration.

Commençons par créer une classeMavenCompilerPlugin dans laquelle nous importons un packagefrom another module.

Un simple estjavax.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);
    }
}

Ensuite, compilons-le:

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

Cependant, lorsque vous utilisez les paramètres par défaut de Java 9, nous obtenons une erreur:

[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

L'erreur vient du fait que ce package se trouve dans un module séparé que nous n'avons pas encore inclus dans notre build.

Le moyen le plus simple de résoudre ce problème est de créer la classea module-info.java et d'indiquer que nous avons besoin du modulejava.xml:

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

Maintenant nous pouvons essayer à nouveau:

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

Et notre sortie sera:

The XML namespace prefix is: xml

5. Conclusion

Dans cet article, nous avons passé en revue le plugincompiler et décrit comment l'utiliser. Nous avons également appris la prise en charge de Maven pour Java 9.

Le code source complet de ce didacticiel se trouve àover on GitHub.