gpt4 book ai didi

java - Maven/逆向 lambda : how to detect dependencies on Java 8 classes

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:51:23 26 4
gpt4 key购买 nike

背景:

我们有一个基于 maven 的 java 项目,目标是 JRE 1.7,但是源代码使用了 lambda,所以我们使用 retrolambda 来转换 Java 8 源代码到 Java 7。我们也使用 StreamSupport当我们需要流、函数*、可选等时向后移植库。

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

如果不依赖于 java8 类或方法(如 java.util.stream.*java.util.Optionaljava8 类似于 Collection.forEach)。如果有这样的用法,则构建通过,但在运行时失败,在 Java 8 的 JVM 下运行时。

问题:

我的目标是在存在此类依赖项的情况下使构建失败。有什么方法可以在构建时检测对新 Java 8 类/方法的依赖性吗?

我考虑了 2 个可能的选项,但我不确定它们中的任何一个是否可行:

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

最佳答案

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

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

关于java - Maven/逆向 lambda : how to detect dependencies on Java 8 classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40403047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com