8

バックグラウンド:

JRE 1.7をmavenターゲットとするベースのJavaプロジェクトがありますが、ソースコードはラムダを使用retrolambdaしているため、Java 8ソースコードをJava 7. また、streams、function.*、Optional などが必要な場合は、StreamSupportバックポート ライブラリを使用します。

の使用にretrolambdaは、プロジェクトのソース言語とターゲット言語の両方のレベルを 1.8 に構成することが含まれます。

java8 のクラスまたはメソッド ( java.util.stream.*java.util.Optional、または で導入されたメソッドjava8などCollection.forEach) に依存関係がなければ、すべて正常に動作します。そのような使用法がある場合、ビルドはパスしますが、Java 8 の JVM で実行すると、実行時に失敗します。

質問:

私の目標は、そのような依存関係が存在する場合にビルドを失敗させることです。Java 8ビルド時に新しいクラス/メソッドへの依存関係を検出する方法はありますか?

2つの可能なオプションについて考えましたが、どちらも実行可能かどうかはわかりません:

  1. 定義済みのクラスとメソッドに対する依存関係を検出するためのある種のバイトコード アナライザー。そのようなツール/maven プラグインはありますか?
  2. リント ( lint4j) ルール。を使用してクラス/メソッドへの依存関係を検出できるかどうかわからないlint
4

1 に答える 1

5

これにはAnimal Sniffer Maven Pluginを使用できます。これにより、コードが指定されたベースライン (「署名」と呼ばれる) の API のみを使用していることを確認できます。あなたの場合、org.codehaus.mojo.signature:java17:1.0署名を使用します。

他の人が指摘したように、ブートストラップ クラスパスを設定することもできますが、a) JDK 7 を設定する必要があり、b) JDK 7 インストールを指す必要があるため、ビルドが少し複雑になります。私の経験では、Animal Sniffer の方がはるかに使いやすいです。

于 2016-11-03T21:13:05.000 に答える