当前位置: 首页 > 知识库问答 >
问题:

有没有办法消除与PMD、Checkstyle、SpotBugs等不兼容的Java API引用?

施刚毅
2023-03-14

我们目前正在使用Java编译器11,并将我们的主要构件部署到Java 11。没问题。

不幸的是,我们使用的服务只支持Java8,所以我们编译了一些针对Java8的服务。没问题。

我们的问题是,开发人员可能会引用Java 8中运行时不可用的方法。例如,列表。of()可选::stream,等等。javacversion 11将把它编译成Java 8,但在JVM version 8上执行时会引发异常。

后者很容易用一个简单的grep语句来识别,但后者更复杂,需要理解代码/AST。

我检查了文档中的Checkstyle、Spotbug和PMD,但没有成功。IntelliJ实际上非常擅长这一点,但它无法集成到我们的CI管道中。

我们得到了这个天真/简单的grep声明:

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

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

共有1个答案

东门晨
2023-03-14

在Java9之前,您需要使用动物嗅探插件或为javac配置正确的-bootclasspath(在javac上的交叉编译选项下)以及-Target选项,或者使用完全相同的JDK版本。

自Java 9以来,有一个新的命令行选项解决了这个问题:--release。只需使用例如--release 8来编译Java8,如果您使用的是任何API,则javac将因编译错误而失败,该API仅在更高版本中可用。

 类似资料:
  • 问题内容: 我们正在将静态分析工具引入Java产品的构建系统中。我们正在使用Maven2,因此Checkstyle和PMD集成是免费提供的。但是,就执行基本样式规则而言,这两个工具之间似乎在功能上有很大的重叠。 同时使用这两者有好处吗?如果一个工具可以工作,我不想维护两个工具。如果选择一种,应该使用哪一种,为什么? 我们还计划使用FindBugs。还有其他静态分析工具值得我们关注吗? 更新: 共识

  • 在我们的项目中,我们使用Findbugs、Checkstyle和PMD。来自Findbugs的验证之一是检查潜在的NullPointerException。默认情况下,我们在包级别将所有内容定义为@Nonnull(在“package info.java”中对包应用适当的注释)。 问题是,开发人员不定期地将这个“package info.java”添加到新创建的包中,并且没有任何自动检查来验证这一点

  • 问题内容: 我知道您可以通过执行 node.requestFocus(); 来将焦点集中在javafx中的一个节点上 。 但是有没有办法从javafx中的节点上夺走焦点或阻止对某个对象的焦点? 问题答案: 我不认为有任何保证将始终有效,但是您可以尝试将焦点设置为本质上不接受键盘输入的内容(例如布局窗格):

  • 这个程序应该输出 但是如果我输入的大小是4,我只输入这些值,但是如果我写的大小是4。。。它不需要我提供4个参数,而是需要3个参数并打印('',1,2,3) 请帮帮忙

  • 我正在编写一个JavaFractal Explorer,分形计算是多线程完成的。以前,我只是创建了一堆线程(系统有多少处理器内核就有多少)并将它们保存在一个数组中,但这会导致一些问题,而且不是很优雅,现在我想切换到执行器。 我需要的功能是: 用户可以随时选择要放大的分形图像的新区域,因此应该可以随时取消计算,并立即重新插入新任务 我的问题是Java ExecutorService(我使用Execu

  • 我在本地计算机上将一条太大的消息推送到Kafka消息主题中,现在我收到一个错误: 增加在这里并不理想,因为我实际上不想接受那么大的消息。