0

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>
4

0 回答 0