使用radar-netbeans触发NullPointerException问题求助
问题背景
我在NetBeans 8.0.2里装了radar-netbeans-2.6插件,现在用SonarQube 6.4服务器,给一个Maven多模块的Spring Boot主项目执行「从Sonar Server获取问题」操作时,直接抛出了空指针异常。
错误日志
java.lang.NullPointerException at qubexplorer.server.SonarQube.getVersion(SonarQube.java:78) at qubexplorer.runner.SonarRunnerProccess.configureProperties(SonarRunnerProccess.java:116) at qubexplorer.runner.SonarRunnerProccess.createRunnerForProject(SonarRunnerProccess.java:103) at qubexplorer.runner.SonarRunnerProccess.executeRunner(SonarRunnerProccess.java:206) at qubexplorer.ui.summary.SonarRunnerTask.execute(SonarRunnerTask.java:99) at qubexplorer.ui.summary.SonarRunnerTask.execute(SonarRunnerTask.java:34) at qubexplorer.ui.task.TaskExecutor$TaskWorker.doInBackground(TaskExecutor.java:62) at javax.swing.SwingWorker$1.call(SwingWorker.java:295) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at javax.swing.SwingWorker.run(SwingWorker.java:334) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [catch] at java.lang.Thread.run(Thread.java:745)
已尝试的操作
一开始我以为是版本兼容问题,先后更换了不同版本的SonarQube服务器,但每次执行操作都会抛出完全相同的空指针异常,实在找不到头绪,来求助各位大佬。
可能的解决方案
从错误栈来看,空指针出现在SonarQube.getVersion()方法中,说明插件尝试获取SonarQube服务器版本时拿到了null,可以从以下几个方向排查:
检查SonarQube服务器配置有效性
打开NetBeans的Radar插件设置,确认SonarQube服务器的URL是否正确(比如有没有遗漏端口、末尾的斜杠等);如果SonarQube开启了权限验证,要确保插件配置了正确的账号密码或者访问Token——没有凭证的话,插件请求版本接口会失败,返回null触发空指针。验证SonarQube API可访问性
手动在浏览器里访问SonarQube的版本接口:http://你的Sonar地址/api/server/version,如果返回正常的版本号(比如6.4.0.25310),说明服务器API没问题;如果返回401/403,就是权限配置的问题;如果无法访问,检查网络或代理设置。排查Maven多模块项目配置
尝试先在单个子模块上执行「获取问题」操作,看是否能正常运行——如果单个模块没问题,说明插件处理多模块项目时存在逻辑缺陷;另外检查主项目的pom.xml,确保Sonar相关配置(比如sonar.projectKey、sonar.projectName)正确且没有冲突。检查插件兼容性与版本
radar-netbeans-2.6发布时间较早,可能对SonarQube 6.x的API支持不完善,或者和NetBeans 8.0.2存在适配问题。可以尝试寻找适配NetBeans 8.0.2的Radar插件更新版本(如果有的话),或者降级到更旧的SonarQube版本(比如5.x系列)测试是否能正常工作。确认NetBeans代理配置
如果你的环境需要代理才能访问SonarQube服务器,要确保NetBeans的网络代理配置正确(路径:Tools > Options > General > Proxy Settings),插件会使用NetBeans的全局代理设置,如果代理配置错误,会导致无法连接Sonar服务器获取版本信息。
内容的提问来源于stack exchange,提问作者prity

