Maven Animal Sniffer プラグインは、変更がジェネリック型の追加のみでない限り、Java API 署名の変更を検出するのに最適です。たとえば、Java 6 では がありますJList
が、Java 7 ではJList<E>
. ジェネリック型パラメーターを使用すると、JDK 6 でコンパイルされませんが、Animal Sniffer はそれを検出しません。開発環境で JDK 7 を使用してコンパイルすると、コードをコミットして JDK 6 を使用している誰かがそれをビルドしようとするまで、ビルドが壊れていることに気づきません。
スニフに失敗するサンプル Java コードと、Maven 構成の関連部分を以下に示します。この悲劇を防ぐのを手伝ってください。:) Animal Sniffer が期待どおりにビルドに失敗するように変更できるものはありますか?
Example.java
import javax.swing.JList;
public class Example {
// Only compiles with JDK 1.7+
private final JList<String> aList = new JList<String>();
}
Maven ビルド構成
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<!-- Make sure we generate the correct Java byte code. -->
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>animal-sniffer-maven-plugin</artifactId>
<version>1.11</version>
<configuration>
<!-- Make sure we don't use incompatible Java APIs. -->
<signature>
<groupId>org.codehaus.mojo.signature</groupId>
<!-- See http://mojo.codehaus.org/signatures/ -->
<artifactId>java16</artifactId>
<version>1.1</version>
</signature>
</configuration>
<executions>
<execution>
<id>sniff-jdk</id>
<goals>
<goal>check</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
</plugin>
...
</plugins>
</build>