背景:
我们有maven-based java项目,它的目标是JRE1.7,但是源代码使用lambdas,所以我们使用retrolambda将Java 8源代码转换为Java 7。此外,当我们需要流、函数.*、可选等时,我们使用StreamSupport支持端口库。
retrolambda的使用涉及将项目的源和目标语言级别配置为1.8。
如果不依赖于java8类或方法(如java.util.stream.*、java.util.Optional或在java8中引入的方法(如Collection.forEach) ),一切都可以正常工作。如果有这样的使用,那么构建传递,但在运行时,当运行在Java 8的JVM下时,它会失败。
问题:
我的目标是在这种依赖关系存在的情况下使构建失败。有没有任何方法可以在构建时检测新的Java 8类/方法的依赖关系?
我考虑了两种可能的选择,但我不确定这两种选择是否可行:
lint4j)规则不确定是否可以使用lint检测对类/方法的依赖发布于 2016-11-03 21:13:05
您可以为此使用动物嗅探器Maven插件。它允许您检查代码是否只使用来自指定基线(称为“签名”)的API。在您的示例中,您将使用org.codehaus.mojo.签名:java17 17:1.0签名。
正如其他人所指出的,您也可以设置引导类路径,但是,( a)需要设置JDK 7,b)使构建更加复杂,因为您需要指向JDK 7安装。根据我的经验,使用动物嗅探器要容易得多。
https://stackoverflow.com/questions/40403047
复制相似问题