Maven Compiler Plugin

Maven Compiler Plugin

1. Überblick

In diesem kurzen Tutorial wird das Plugincompilervorgestellt, eines der Kern-Plugins des Maven-Build-Tools.

Eine Übersicht über die anderen Core-Plugins finden Sie unterthis article.

2. Plugin Ziele

The compiler plugin is used to compile the source code of a Maven project. Dieses Plugin hat zwei Ziele, die bereits an bestimmte Phasen des Standardlebenszyklus gebunden sind:

  • compile kompilieren Hauptquelldateien

  • testCompile kompilieren Testquelldateien

Hier ist dascompiler-Plugin im POM:


    maven-compiler-plugin
    3.7.0
    
        ...
    

Wir können die neueste Version dieses Pluginshere finden.

3. Aufbau

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. Wir können diese Einstellungen im Elementconfiguration ändern:


    1.8
    1.8
    <-- other customizations -->

Der Einfachheit halber können wir die Java-Version als Eigenschaften des POM festlegen:


    1.8
    1.8

Manchmal möchten wir Argumente an den Compiler vonjavacübergeben. Hier bietet sich der ParametercompilerArgsan.

Beispielsweise können wir die folgende Konfiguration angeben, damit der Compiler vor nicht aktivierten Vorgängen warnt:


    
    
        -Xlint:unchecked
    

Beim Kompilieren dieser Klasse:

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

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

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

Auf der Konsole wird eine ungeprüfte Warnung angezeigt:

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

Da beide Ziele descompiler-Plugins automatisch an Phasen im Maven-Standardlebenszyklus gebunden sind, können wir diese Ziele mit den Befehlenmvn compile undmvn test-compile ausführen.

4. Java 9-Updates

4.1. Aufbau

Bis Java 8 haben wir die Versionsnummer als 1.x verwendet, wobeix die Java-Version darstellt, wie 1.8 für Java 8.

Für Java 9 und höher können wir einfach die Versionsnummer direkt verwenden:


    9
    9

Ebenso können wir die Version mitproperties wie folgt definieren:


    9
    9

Maven hat die Unterstützung für Java 9 in3.5.0, hinzugefügt, sodass wir mindestens diese Version benötigen. Wir benötigen außerdem mindestens3.8.0 vonthe maven-compiler-plugin:


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

4.2. Bauen

Jetzt ist es Zeit, unsere Konfiguration zu testen.

Erstellen wir zunächst eineMavenCompilerPlugin-Klasse, in die wir ein Paketfrom another module importieren.

Eine einfache istjavax.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);
    }
}

Als nächstes kompilieren wir es:

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

Bei Verwendung der Java 9-Standardeinstellungen wird jedoch eine Fehlermeldung angezeigt:

[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

Der Fehler ist darauf zurückzuführen, dass sich dieses Paket in einem separaten Modul befindet, das wir noch nicht in unseren Build aufgenommen haben.

Der einfachste Weg, dies zu lösen, besteht darin, die Klassea module-info.javazu erstellen und anzugeben, dass das Moduljava.xmlbenötigt wird:

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

Jetzt können wir es noch einmal versuchen:

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

Und unser Output wird sein:

The XML namespace prefix is: xml

5. Fazit

In diesem Artikel haben wir das Plugincompilerdurchgesehen und beschrieben, wie es verwendet wird. Wir haben auch erfahren, wie Maven Java 9 unterstützt.

Den vollständigen Quellcode für dieses Tutorial finden Sie unterover on GitHub.