gpt4 book ai didi

java - 有没有办法用 PMD、Checkstyle、SpotBugs 等检查不兼容的 Java API 引用?

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

我们目前正在使用 Java Compiler 11 并将我们的主要工件部署到 Java 11。这没问题。

不幸的是,我们使用的服务仅支持 Java 8,因此我们针对 Java 8 编译了其中一些服务。这里没问题。

我们的问题是开发人员可能会引用 Java 8 运行时不可用的方法。例如List.of(), Optional::streamjavac版本11会编译成Java 8,但是会抛出异常在 JVM 版本 8 上执行时。

后者很容易通过简单的 grep 语句识别,但后者比较棘手,需要理解代码/AST。

我检查了 Checkstyle、Spotbugs 和 PMD 的文档,但没有成功。 IntelliJ 在这方面其实很擅长,但它不能集成到我们的 CI 流水线中。

我们得到了这个天真/简单的 grep 语句:

grep --recursive --extended-regexp '[ \(](List|Set|Map).of' 'our_project'

我们希望有一种准确的方法来识别不兼容的 API。

最佳答案

在 Java 9 之前,您需要使用 Animal Sniffer Plugin或为 javac(在 javac 上的交叉编译选项下)配置正确的 -bootclasspath 以及 -target 选项,或者只使用完全相同的 JDK 版本。

从 Java 9 开始,有一个新的命令行选项,解决了这个问题:--release .只需使用例如--release 8 为 Java8 和 javac 编译应该失败并出现编译错误,如果您使用任何 API,那只能在更高版本中使用。

关于java - 有没有办法用 PMD、Checkstyle、SpotBugs 等检查不兼容的 Java API 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56531714/

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