背景
我们有基于maven
的java项目,它以JRE 1.7为目标,但源代码使用lambdas,因此我们使用retrolambda
将Java 8
源代码转换为Java 7
。当我们需要流,函数。*,可选等等时,我们也使用StreamSupport backport库。
retrolambda
的使用涉及将项目的源语言和目标语言级别配置为1.8。
如果对java8类或方法(如java.util.stream.*
,java.util.Optional
或java8
中引入的方法(如Collection.forEach
)没有依赖关系,那么一切正常。如果有这样的用法然后构建传递,但它在运行时失败,当在Java 8的JVM下运行时。
问题:
我的目标是在存在此类依赖项的情况下使构建失败。有没有办法在构建时检测新Java 8
类/方法的依赖关系?
我想到了两种可能的选择,但我不确定它们中的任何一种是否可行:
lint4j
)规则。不确定是否可以使用lint
答案 0 :(得分:5)
您可以使用Animal Sniffer Maven Plugin。它允许您检查您的代码是否仅使用来自指定基线的API(称为“签名”)。在您的情况下,您将使用 org.codehaus.mojo.signature:java17:1.0 签名。
正如其他人所指出的那样,你也可以设置bootstrap类路径,但是a)需要设置JDK 7并且b)使构建更复杂,因为你需要指向JDK 7安装。根据我的经验,动物嗅探器更容易使用。