Maven/Retrolambda:如何检测Java 8类的依赖关系

Den*_*ich 8 java lint maven java-8 retrolambda

背景:

我们有maven基于Java的项目,它以JRE 1.7为目标,但源代码使用lambdas,因此我们用它retrolambda来转换Java 8源代码Java 7.当我们需要stream,function.*,Optional等时,我们也使用StreamSupport backport库.

用法retrolambda包括将项目的源语言和目标语言级别配置为1.8.

如果对java8类或方法(比如不依赖一切工作正常java.util.stream.*,java.util.Optional或方法引入java8类似Collection.forEach).如果有这样的用法然后构建传递,但它在运行时失败,当在Java 8的JVM下运行时.

题:

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

我想到了两个可能的选择,但我不确定它们中的任何一个是否可行:

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

Gun*_*nar 5

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

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