8

背景:

我们有maven基于 JRE 1.7 的基于 java 项目,但源代码使用 lambdas,因此我们retrolambda用于将Java 8源代码转换为Java 7. 当我们需要流、函数。*、可选等时,我们也会使用StreamSupport 反向端口库。

的使用retrolambda涉及将项目的源语言和目标语言级别配置为 1.8。

如果对 java8 类或方法(如java.util.stream.*、或在likejava.util.Optional中引入的方法)没有依赖关系,则一切正常。如果有这样的用法,则构建通过,但在运行时失败,在 Java 8 的 JVM 下运行时。java8Collection.forEach

问题:

我的目标是在存在此类依赖项的情况下使构建失败。有没有办法Java 8在构建时检测对新类/方法的依赖关系?

我考虑了两种可能的选择,但我不确定它们是否可行:

  1. 某种字节码分析器,用于检测预定义类和方法的依赖关系。有这样的工具/Maven插件吗?
  2. Lint ( lint4j) 规则。不确定是否可以使用来检测对类/方法的依赖lint
4

1 回答 1

5

您可以为此使用Animal Sniffer Maven 插件。它允许您检查您的代码是否仅使用来自指定基线(称为“签名”)的 API。在您的情况下,您将使用org.codehaus.mojo.signature:java17:1.0签名。

正如其他人指出的那样,您也可以设置引导类路径,但是 a) 需要设置 JDK 7 并且 b) 使构建更加复杂,因为您需要指向 JDK 7 安装。根据我的经验,Animal Sniffer 更容易使用。

于 2016-11-03T21:13:05.000 回答