Mavenコンパイラプラグイン

Mavenコンパイラプラグイン

1. 概要

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

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

2. プラグインの目標

The compiler plugin is used to compile the source code of a Maven project。 このプラグインには、デフォルトのライフサイクルの特定のフェーズに既にバインドされている2つの目標があります。

  • compileはメインソースファイルをコンパイルします

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

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


    maven-compiler-plugin
    3.7.0
    
        ...
    

このプラグインhereの最新バージョンを見つけることができます。

3. 設定

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.configuration要素でこれらの設定を変更できます。


    1.8
    1.8
    <-- other customizations -->

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


    1.8
    1.8

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

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


    
    
        -Xlint:unchecked
    

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

public class Data {
    List 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
  found:    java.util.ArrayList

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

4. Java 9アップデート

4.1. 設定

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

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


    9
    9

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


    9
    9

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


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

4.2. 造る

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

まず、パッケージfrom another moduleをインポートする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.example.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.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

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

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

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

今、もう一度試すことができます:

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

出力は次のようになります。

The XML namespace prefix is: xml

5. 結論

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

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