Mavenコンパイラプラグイン
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.0のmaven-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のにあります。