我们目前正在使用Java编译器11,并将我们的主要构件部署到Java 11。没问题。
不幸的是,我们使用的服务只支持Java8,所以我们编译了一些针对Java8的服务。没问题。
我们的问题是,开发人员可能会引用Java 8中运行时不可用的方法。例如,列表。of()
,可选::stream
,等等。javac
version 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。
在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
我在eclipse Neon中使用的SonarLint版本为3.1.0。SonarQube版本为5.6.6。 在分析项目的问题时,注意到它没有显示外部插件的问题(PMD、FindBug、CheckStyle)。 从Sonar Lint与服务器规则不同步的链接中,我了解到Sonar Lint将不支持外部插件。在未来发布的SonarLint版本中是否有支持外部插件的想法?