SonarQube Runner 在分析期间抛出 NullPointerException

Posted

技术标签:

【中文标题】SonarQube Runner 在分析期间抛出 NullPointerException【英文标题】:SonarQube Runner throws NullPointerException during analysis 【发布时间】:2015-03-28 18:47:26 【问题描述】:

更新: 我在 Fedora 21 上运行它。 SonarQube - 5.0。 SonarQube Runner - 2.4

UPDATE2:Findbugs v3.1、Java Plugin v2.8

更新3: 分析器在以下文件上失败:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MyManager extends ParentManager 
    public MyManager(int id, int var1, int var2, int var3) 
        super(id, var1, var2, var3);
    

    public void load() 
        Connection con = null;
        Statement st;
        ResultSet res;

        try 

            con = DatabaseManager.getDataSource().getConnection();
            st = con.createStatement();

            int currentId = 0;
            CurrentData currentData= null;

            res = st.executeQuery("SELECT subjects.subjectname" + " AS name, " +
                    " subjects.subjectcode AS code, " +
                    " groups.groupname AS gname, " +
                    " groups.groupID AS gID , " +
                    " subjects.sID AS sID, " +
                    " groups.isMain AS ismain   " +
                    " FROM joinGroup LEFT JOIN groups ON joinGroup.groupID=groups.groupID " +
                    " LEFT JOIN subjects ON subjects.sID=groups.sID " +
                    " WHERE joinGroup.sID=" + id + "  " +
                    " AND groups.var1" + var1 + " AND groups.var2=" + var2 + " " +
                    " ORDER BY name, subjects.subjectcode, subjects.sID ");
            while (res.next()) 
                if (currentId != res.getInt("sID")) 
                    currentData = new CurrentData();
                    data.subjects.add(currentData);
                    currentData.subjectName = res.getString("name");
                    currentData.subjectID = res.getInt("sID");
                
                CurrentGroupData groupData = new CurrentGroupData();
                groupData.name = res.getString("gname");
                groupData.id = res.getInt("gID");
                currentId = res.getInt("sID");
                if (res.getBoolean("ismain")) 
                    assert currentData != null;
                    currentData.groupID = res.getInt("gID");
                
                if (currentData != null) 
                    currentData.groups.add(groupData);
                
            

            loadSubjectsData(st, res);

         catch (Exception exc) 
            Log.writeLog(ex);
         finally 
            try 
                con.close();
             catch (SQLException e) 
                Log.writeLog(e);
            
        
    

我已经按照声纳网站上的教程安装了 SonarQube。 我可以浏览到 localhost:9000 并显示起始页。 然后我尝试通过命令分析项目:sonar-runner。 它失败。 运行 sonar-runner -X 显示如下:

> 错误:Sonar runner 执行期间出错 org.sonar.runner.impl.RunnerException:无法执行声纳 在 org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:91) 在 org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75) 在 java.security.AccessController.doPrivileged(本机方法) 在 org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69) 在 org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50) 在 org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102) 在 org.sonar.runner.api.Runner.execute(Runner.java:100) 在 org.sonar.runner.Main.executeTask(Main.java:70) 在 org.sonar.runner.Main.execute(Main.java:59) 在 org.sonar.runner.Main.main(Main.java:53) 引起:org.sonar.squidbridge.api.AnalysisException:SonarQube 无法分析文件:'/path/to/my/file/MyFile.java' 在 org.sonar.java.ast.AstScanner.simpleScan(AstScanner.java:114) 在 org.sonar.java.ast.AstScanner.scan(AstScanner.java:75) 在 org.sonar.java.JavaSquid.scanSources(JavaSquid.java:122) 在 org.sonar.java.JavaSquid.scan(JavaSquid.java:115) 在 org.sonar.plugins.java.JavaSquidSensor.analysis(JavaSquidSensor.java:91) 在 org.sonar.batch.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:79) 在 org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:70) 在 org.sonar.batch.phases.PhaseExecutor.execute(PhaseExecutor.java:122) 在 org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:222) 在 org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93) 在 org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78) 在 org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:235) 在 org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:230) 在 org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:223) 在 org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93) 在 org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78) 在 org.sonar.batch.scan.ScanTask.scan(ScanTask.java:65) 在 org.sonar.batch.scan.ScanTask.execute(ScanTask.java:52) 在 org.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.java:128) 在 org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93) 在 org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78) 在 org.sonar.batch.bootstrap.BootstrapContainer.executeTask(BootstrapContainer.java:171) 在 org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:95) 在 org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67) 在 org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java:48) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:87) ... 9 更多 引起:java.lang.NullPointerException 在 org.sonar.java.checks.AbstractInjectionChecker.isIdentifierDynamicString(AbstractInjectionChecker.java:67) 在 org.sonar.java.checks.AbstractInjectionChecker.isDynamicString(AbstractInjectionChecker.java:54) 在 org.sonar.java.checks.AbstractInjectionChecker.isDynamicString(AbstractInjectionChecker.java:49) 在 org.sonar.java.checks.AbstractInjectionChecker.isDynamicString(AbstractInjectionChecker.java:57) 在 org.sonar.java.checks.AbstractInjectionChecker.isDynamicString(AbstractInjectionChecker.java:49) 在 org.sonar.java.checks.AbstractInjectionChecker.isDynamicString(AbstractInjectionChecker.java:57) 在 org.sonar.java.checks.AbstractInjectionChecker.isDynamicString(AbstractInjectionChecker.java:49) 在 org.sonar.java.checks.AbstractInjectionChecker.isDynamicString(AbstractInjectionChecker.java:57) 在 org.sonar.java.checks.SQLInjectionCheck.visitNode(SQLInjectionCheck.java:48) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:95) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:113) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:97) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:113) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:97) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:113) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:97) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:113) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:97) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:113) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:97) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:113) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:97) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:113) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:97) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:113) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:97) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.scanTree(SubscriptionVisitor.java:73) 在 org.sonar.java.ast.visitors.SubscriptionVisitor.scanFile(SubscriptionVisitor.java:67) 在 org.sonar.java.model.VisitorsBridge.visitFile(VisitorsBridge.java:122) 在 com.sonar.sslr.impl.ast.AstWalker.walkAndVisit(AstWalker.java:67) 在 org.sonar.java.ast.AstScanner.simpleScan(AstScanner.java:107) ... 38 更多 >

没有做任何“异国情调”的事情,只是按照这样的官方教程进行操作: http://docs.sonarqube.org/display/SONAR/Analyzing+with+SonarQube+Runner

我在本地运行它。 有什么想法吗?

谢谢

【问题讨论】:

您使用的是哪个版本的 SonarQube 和 SonarQube Java 插件? SonarQube - 5.0 SonarQube Runner - 2.4 在网站上它说 SonarQube 已经安装了 Java 插件。所以我假设Java插件版本是2.8,对吧?如何查找 Java 插件版本? 这将在服务器的设置部分,类别“更新中心”中。 这似乎是 SQLInjectionCheck 中的一个问题。您能否分享分析失败的文件代码? 不确定是否共享代码。它是我最近开始从事的公司项目之一。会调查的。但是声纳分析引擎不应该独立于代码吗? 【参考方案1】:

ReturnEmptyArrayyNotNullCheck 遇到了类似的问题。作为一种解决方法,我在 sonarqube web gui 中禁用了该规则。 以管理员身份登录。单击顶部菜单中的规则。搜索 SQL 或 Inject 或任何其他词以查找您认为导致分析失败的规则。然后选择规则并在附加到项目的质量配置文件中禁用它。当然,在所有附加项目中,这条规则将被完全忽略。

【讨论】:

【参考方案2】:

我没有解决办法,但是遇到了同样的问题,在 sonar 网站上找到了这个参考,会不会是你遇到的同样的问题?

http://sonarqube.15.x6.nabble.com/NullPointerException-analysing-file-with-SQLInjectionCheck-td5032155.html(滚动到最后)

【讨论】:

欢迎来到 Stack Overflow!虽然这在理论上可以回答这个问题,it would be preferable 在这里包括答案的基本部分,并提供参考链接。 我认为这是相同或至少相关的问题。虽然没有看到任何解决方案

以上是关于SonarQube Runner 在分析期间抛出 NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

静态代码分析工具sonarqube+sonar-runner的安装配置及使用

如何用sonarqube检查c++

如何去除sonarqube自动扫描

SonarQube Runner 与扫描仪

通过 jenkins 运行 SonarQube 分析,为 Spark Scala 代码抛出 *** 错误

Sonarqube v.4 TFS 任务“发布分析结果”抛出错误“无法获取指标”