发布时间:2025-07-31 10: 00: 00
品牌型号:联想 E550C ThinkPad
系统:Windows 11
软件版本:SonarQube Server 25
从Java 8到Java 21,编程语言的不断迭代更新,使得不同Java版本的项目开发语法会有许多不同。而新版SonarQube在扫描时要求Java版本不低于Java 17,这使得一些基于Java8、Java11开发的老旧项目无法被正常识别扫描,为实现这一要求,SonarQube提供了JDK自定义配置。下面将介绍SonarQube怎么兼容多个JDK,SonarQube配置规则如何进行,以实现Java项目的扫描支持。
一、SonarQube怎么兼容多个JDK
SonarQube支持在不同JDK版本下运行扫描Java项目,但SonarQube本身需要使用Java17或Java21启动,以下是实现SonarQube多JDK兼容的方法:
1、当分析项目的JDK版本与SonarQube的JDK版本不同时,需要手动指定分析器在分析期间引用的JDK 类。在项目扫描配置文件中,设置sonar.java.jdkHome为对应的jdk执行文件文件夹地址,如图所示指定扫描项目时使用jdk11。
2、仅仅配置JDK路径并不能让项目规则完全使用该Java版本的所述规则,如设置JDK11的情况下,Java 21的规则仍然生效,这会使得扫描出的结果可能会产生很多不必要的issues问题。
为此,还需要在配置中加入“sonar.java.source=11”的配置,该配置可以使得非Java 11版本的规则被禁用,即使规则正处于激活状态。
二、SonarQube配置规则
在SonarQube中配置规则,能帮助我们发现代码漏洞、安全热点和可维护性代码,对Java语言,配置规则主要由三大部分组成:SonarQube内置规则、Java插件规则、一般问题导入规则。
1、内置规则。在Rules页面左侧筛选Languages为Java,就可以看到Java已有的内置规则,在每条规则右侧都会标记规则对应的适用范围,如spring框架、java8版本、cert框架等,内置规则我们可以设置激活或取消激活,但无法自行更改规则内容。
2、插件规则。我们可以在“https://github.com/SonarSource/sonar-java/blob/8.0.0.36314/docs/CUSTOM_RULES_101.md”上查看自定义Java规则插件的相关要求和语法,下图是一个自定义规则的代码示例,规则通过注解指定规则名为“AvoidTreeList”,当发现tree引用TreeList时,通过reportIssue函数报告一个issues问题。
3、一般问题导入规则。如果大家通过第三方分析器分析出对应的代码问题,则可以将分析出的问题和对应的规则,以JSON文件导入到SonarQube中,JSON中包括规则列表和问题列表,问题与规则通过ruleId进行对应。
使用时只需在项目SonarQube配置中添加“sonar.externalIssuesReportPaths”的配置,并指定对应JSON文件路径即可。
通过本文介绍的SonarQube怎么兼容多个JDK,SonarQube配置规则方法,大家可以完美实现SonarQube对多JDK环境的兼容及与对应规则的匹配。SonarQube不仅提供了完善的默认规则集来覆盖大多数常见开发场景,还支持针对特定JDK版本进行灵活配置。另外对于项目中存在的自定义语法或功能,还可以以插件的形式实现规则支持。
展开阅读全文
︾
读者也喜欢这些内容:
SonarQube如何加白名单功能 SonarQube如何清理数据
白名单可以将部分代码片段或内置规则排除在SonarQube的扫描范围之外,从而避免问题频繁报错或忽略已知但无需修复的问题,通过合理配置白名单,开发人员可以确保扫描结果更加精准,减少不必要的修复工作,同时减少报告数据量,使SonarQube的检查更加贴合实际项目需求。下面本文将向大家讲述SonarQube如何加白名单功能,SonarQube如何清理数据,从而让SonarQube更好地服务于开发流程中。...
阅读全文 >
SonarQube如何设置允许匿名访问 SonarQube自定义规则
SonarQube作为一款配备了精细化权限管理的代码质量检测工具,既可以在设置中向指定团队成员或组别分配检测项目的访问权限,确保只有授权人员才能查看敏感代码质量数据或进行自定义规则等操作,也可以在设置中允许其他用户匿名访问,降低项目协作门槛。下面,将通过一篇文章,向大家提供SonarQube如何设置允许匿名访问,SonarQube自定义规则怎么操作的相关内容指导方案。...
阅读全文 >