動物探知機Mavenプラグインの紹介

[["introduction”]]

1前書き

Javaで作業しながら、同時に複数の言語バージョンを使用する必要がある場合があります。

私たちのJavaプログラムはあるJavaバージョン(例えば - Java 6)とコンパイル時に互換性がある必要がありますが、私たちの開発ツールでは異なるバージョン(例えば - Java 8)とアプリケーションを実行するために多分異なるバージョンを使う必要があります。

このクイック記事では、Javaバージョンベースの非互換性対策を追加するのがいかに簡単であるか、そして以前に生成されたシグネチャに対してプロジェクトをチェックすることによってAnimal Snifferプラグインを使用してビルド時にフラグを立てる方法を示します。

[["compiler”]]

2 Javaコンパイラ -source および -target を設定する

ローカルマシンでJava 7を使用していますが、まだJava 6を使用している本番環境にプロジェクトをデプロイしたいと思います。

この場合は、Java 6を指す source フィールドと target フィールドを使用してMavenコンパイラー・プラグインを構成できます。

“ source” フィールドは、Java言語の変更との互換性を指定するために使用され、 “ target” フィールドは、JVMの変更との互換性を指定するために使用されます。

それでは、__pom.xmlのMavenコンパイラ構成を見てみましょう。

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
    <configuration>
            <source>1.6</source>
            <target>1.6</target>
    </configuration>
    </plugin>
</plugins>

ローカルマシン上のJava 7とコンソールへの「こんにちは世界」のJavaコード印刷で、先に進んでMavenを使用してこのプロジェクトをビルドすると、Java 6を実行しているプロダクションボックス上で正しくビルドおよび動作します。

3 APIの非互換性の紹介

それでは、偶然にAPIの非互換性を導入するのがどれほど簡単かを見てみましょう。

新しい要件に取り組み始め、Java 6にはなかったJava 7のAPI機能をいくつか使用するとしましょう。

更新されたソースコードを見てみましょう。

public static void main(String[]args) {
    System.out.println("Hello World!");
    System.out.println(StandardCharsets.UTF__8.name());
}

java.nio.charset.StandardCharsets は、Java 7で導入されました。

Mavenビルドを実行しても、コンパイルは成功しますが、Java 6がインストールされているプロダクションボックスでは実行時にリンクエラーが発生して失敗します。

  • Maven documentation はこの落とし穴に言及しており、Animal Snifferプラグインの1つとして使用することをお勧めします。オプション

[["reporting]]

4 APIの互換性の報告

Animal Snifferプラグインは2つのコア機能を提供します。

  1. Javaランタイムの署名を生成する

  2. APIシグネチャに対してプロジェクトをチェックする

それでは、プラグインを含めるように pom.xml を変更しましょう。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>animal-sniffer-maven-plugin</artifactId>
    <version>1.16</version>
    <configuration>
        <signature>
            <groupId>org.codehaus.mojo.signature</groupId>
            <artifactId>java16</artifactId>
            <version>1.0</version>
        </signature>
    </configuration>
    <executions>
        <execution>
            <id>animal-sniffer</id>
            <phase>verify</phase>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
</plugin>

ここでは、Animal Snifferの設定セクションは既存のJava 6ランタイムシグネチャを参照しています。また、実行部はプロジェクトのソースコードを与えられた署名と照合し、問題があればフラグを立てます。

先に進んでMavenプロジェクトをビルドすると、ビルドは期待どおりに署名検証エラーを報告するプラグインで失敗します。

----[INFO]------------------------------------------------------------------------[INFO]BUILD FAILURE[INFO]------------------------------------------------------------------------[ERROR]Failed to execute goal org.codehaus.mojo:animal-sniffer-maven-plugin:1.16:check
(animal-sniffer) on project example-animal-sniffer-mvn-plugin: Signature errors found.
Verify them and ignore them with the proper annotation if needed.
----

[["conclusion”]]

5結論

このチュートリアルでは、Maven Animal Snifferプラグインと、ビルド時にAPI関連の非互換性がある場合にそれを報告するためにそれを使用する方法について説明しました。

いつものように、完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/animal-sniffer-mvn-plugin[over on GitHub]から入手可能です。

前の投稿:Vavrのどちらかの紹介
次の投稿:Javaデータオブジェクトガイド