1. 概要

このクイックチュートリアルでは、Mavenビルドツールのコアプラグインの1つであるコンパイラプラグインを紹介します。

その他のコアプラグインの概要については、この記事を参照してください。

2. プラグインの目標

コンパイラプラグインは、Mavenプロジェクトのソースコードをコンパイルするために使用されます。 このプラグインには2つの目標があり、それらはすでにデフォルトのライフサイクルの特定のフェーズにバインドされています。

  • コンパイルメインソースファイルをコンパイルします
  • testCompile テストソースファイルをコンパイルします

POMのcompilerプラグインは次のとおりです。

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
        ...
    </configuration>
</plugin>

このプラグインの最新バージョンはここにあります。

3. 構成

デフォルトでは、コンパイラプラグインはJava 5と互換性のあるソースコードをコンパイルし、生成されたクラスは使用中のJDKに関係なくJava5でも機能します。これらの設定は構成で変更できます。エレメント:

<configuration>
    <source>1.8</source>
    <target>1.8</target>
    <-- other customizations -->
</configuration>

便宜上、JavaバージョンをPOMのプロパティとして設定できます。

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

javacコンパイラに引数を渡したい場合があります。 ここでcompilerArgsパラメーターが役立ちます。

たとえば、コンパイラに次の構成を指定して、チェックされていない操作について警告することができます。

<configuration>
    <!-- other configuration -->
    <compilerArgs>
        <arg>-Xlint:unchecked</arg>
    </compilerArgs>
</configuration>

このクラスをコンパイルする場合:

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

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

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

コンソールにチェックされていない警告が表示されます。

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

コンパイラプラグインの両方の目標はMavenのデフォルトライフサイクルのフェーズに自動的にバインドされるため、コマンド mvncompileおよびmvntest-compileを使用してこれらの目標を実行できます。 ]。

4. Java9アップデート

4.1. 構成

Java 8までは、バージョン番号を1として使用していました。 x ここで、 x はJavaのバージョンを表し、Java8の1.8のようになります。

Java 9以降の場合、バージョン番号を直接使用できます。

<configuration>
    <source>9</source>
    <target>9</target>
</configuration>

同様に、プロパティを使用してバージョンを次のように定義できます。

<properties>
    <maven.compiler.source>9</maven.compiler.source>
    <maven.compiler.target>9</maven.compiler.target>
</properties>

Mavenは3.5.0、でJava 9のサポートを追加したため、少なくともそのバージョンが必要になります。 また、少なくとも3.8.0maven-compiler-pluginが必要です。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <source>9</source>
                <target>9</target>
            </configuration>
        </plugin>
    </plugins>
</build>

4.2. 建てる

次に、構成をテストします。

まず、別のモジュールからパッケージをインポートするMavenCompilerPluginクラスを作成しましょう。

単純なものは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);
    }
}

次に、それをコンパイルしましょう:

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

ただし、Java 9のデフォルトを使用すると、エラーが発生します。

[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.baeldung.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.baeldung.maven.java9.MavenCompilerPlugin

このエラーは、このパッケージが、ビルドにまだ含まれていない別のモジュールに含まれているために発生します。

これを解決する最も簡単な方法は、 a module-info.java クラスを作成し、java.xmlモジュールが必要であることを示すことです。

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

これで、再試行できます。

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

そして、出力は次のようになります。

The XML namespace prefix is: xml

5. 結論

この記事では、コンパイラプラグインについて説明し、その使用方法について説明しました。 また、MavenによるJava9のサポートについても学びました。

このチュートリアルの完全なソースコードは、GitHubにあります。