Jea*_*her 8 java checkstyle pmd spotbugs
当前,我们正在使用Java Compiler 11,并将主要工件部署到Java11。在这里没有问题。
不幸的是,我们使用的服务仅支持Java 8,因此我们针对Java 8编译了其中的一些。
我们的问题是,开发人员可能会引用Java 8在运行时不可用的方法,例如List.of(),Optional::stream等。javac版本11会将其编译为Java 8,但是在JVM版本8上执行时将引发异常。
后者很容易通过一个简单的grep语句来识别,但是后者则比较棘手,需要理解代码/ AST。
我没有检查Checkstyle,Spotbugs和PMD的文档。IntelliJ实际上非常擅长于此,但是它无法集成到我们的CI管道中。
我们得到了这个天真/简单的grep语句:
grep --recursive --extended-regexp '[ \(](List|Set|Map).of' 'our_project'
Run Code Online (Sandbox Code Playgroud)
我们希望有一种准确的方法来识别不兼容的API。
在 Java 9 之前,您需要使用Animal Sniffer 插件或为 javac 配置正确的选项(在javac-bootclasspath的 Cross-Compilation-Options 下)以及选项,或者仅使用完全相同的 JDK 版本。-target
从 Java 9 开始,有一个新的命令行选项可以解决这个问题:--release. 只需使用eg--release 8为Java8 进行编译,javac 就会失败并出现编译错误,如果您使用任何API,则该API 仅在更高版本中可用。
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |