Maven Animal Sniffer插件非常适合检测Java API签名更改,除非更改只是添加泛型类型。例如,在Java 6中,您有JList
,但在Java 7中,您有JList<E>
。如果我使用泛型类型参数,它将无法使用JDK 6进行编译,但Animal Sniffer不会检测到它。如果我在我的dev env中使用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>