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

Animal Sniffer Mavenプラグインの概要

1. 前書き

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

Javaプログラムが1つのJavaバージョン(たとえば– Java 6)とコンパイル時互換である必要があるのは一般的ですが、アプリケーションを実行するには、開発ツールで別のバージョン(たとえば– Java 8)を使用する必要があります。 。

この簡単な記事では、Javaバージョンベースの非互換性セーフガードを追加するのがいかに簡単であるか、および以前に生成された署名に対してプロジェクトをチェックすることにより、ビルド時にこれらの問題にフラグを立てるためにAnimalSnifferプラグインを使用する方法を示します。

2. Javaコンパイラの-source-targetの設定

hello world Mavenプロジェクトから始めましょう。ローカルマシンでJava 7を使用していますが、Java6をまだ使用している本番環境にプロジェクトをデプロイしたいと思います。

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

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

pom.xml:のMavenコンパイラー構成を見てみましょう


    
        org.apache.maven.plugins
        maven-compiler-plugin
        3.7.0
    
            1.6
            1.6
    
    

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

3. APIの非互換性の紹介

ここで、APIの非互換性を誤って導入することがいかに簡単であるかを見てみましょう。

いくつかの新しい要件に取り組み始め、Java6には存在しなかったJava7のいくつかのAPI機能を使用するとします。

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

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

java.nio.charset.StandardCharsetsはJava7で導入されました。

ここでMavenビルドを実行すると、コンパイルは成功しますが、Java 6がインストールされた実稼働ボックスでリンケージエラーが発生して実行時に失敗します。

Mavendocumentationはこの落とし穴に言及しており、オプションの1つとしてAnimalSnifferプラグインを使用することを推奨しています。

4. APIの互換性のレポート

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

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

  2. API署名に対するプロジェクトの確認

プラグインを含めるためにpom.xmlを変更してみましょう。


    org.codehaus.mojo
    animal-sniffer-maven-plugin
    1.16
    
        
            org.codehaus.mojo.signature
            java16
            1.0
        
    
    
        
            animal-sniffer
            verify
            
                check
            
        
    

ここで、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.

5. 結論

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

いつものように、完全なソースコードはover on GitHubで利用できます。