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>