【问题标题】:Calling Sonar from my java program从我的 java 程序调用声纳
【发布时间】:2013-04-30 01:11:54
【问题描述】:

我已经在我的本地主机上安装了声纳服务器。而且我能够运行和分析java项目。即使我已经在 Eclipse 上安装了声纳插件。

但我想从我的 java 项目(如简单的 java 类)中运行声纳,并且应该检索声纳结果并能够将其保存在数据库中。我搜索了教程,但找不到答案。请任何人都可以提供示例代码或资源,我可以从中获得知识来克服这项任务。

import javax.annotation.Resource;


import org.sonar.wsclient.Host;
import org.sonar.wsclient.Sonar;
import org.sonar.wsclient.connectors.HttpClient4Connector;
import org.sonar.wsclient.services.*;

public class SonarTask1{

public static void main(String[] args) {
    //public void Hi(){
    String url = "http://localhost:9000";
    String login = "admin";
    String password = "admin";
    Sonar sonar = new Sonar(new HttpClient4Connector(new Host(url, login, password)));

    String projectKey = "java-sonar-runner-simple";
    String manualMetricKey = "burned_budget";

    sonar.create(ManualMeasureCreateQuery.create(projectKey, manualMetricKey).setValue(50.0));

    for (ManualMeasure manualMeasure : sonar.findAll(ManualMeasureQuery.create(projectKey))) {
      System.out.println("Manual measure on project: " + manualMeasure);
    }
  }

}

【问题讨论】:

    标签: java sonarqube sonar-runner


    【解决方案1】:

    您可以通过 Java 程序做 2 件事:

    • 启动声纳分析:查看Sonar Ant Task(在方法#launchAnalysis 中)以了解如何轻松完成此操作。

    • 从 Sonar 服务器检索结果:为此检查 Web API

    【讨论】:

    • 我可以知道我需要哪些依赖项。上面提到的“网络服务客户端 API”中的依赖项没有下载到我的 Maven 仓库
    • 您可能忘记向依赖项添加版本(随着版本的变化,文档中没有指定)。您可以使用 3.5.1 版本。
    • 是的,我添加了 sonar-ws-client 3.5.1 和 commons-httpclient 3.1 作为外部 jars。并编写了一个如上更新的程序,但在 com.vxl.appanalytix.controllers.controllerClasses.SonarTask1.main(SonarTask1.java:17) 处出现类似“java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpRequestBase”的异常作者:java.lang.ClassNotFoundException:org.apache.http.client.methods.HttpRequestBase.
    • 我可以知道原因吗?是否必须添加任何其他 jar 或依赖项
    • 使用的projectKey是什么?是项目名吗?
    【解决方案2】:

    关于“java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpRequestBase”你需要这个依赖(Sonar WS 使用它们)

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.3.1</version>
    </dependency>
    
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
    </dependency>
    
    
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>1.7.7</version>
    </dependency>
    
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.6.2</version>
    </dependency>
    

    另外,我建议在使用 Eclipse IDE 时更新 maven 项目并检查快照/发布的强制更新,因为不知何故 org.apache.httpclient 无法被类路径识别

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      • 2022-07-01
      • 1970-01-01
      • 2014-11-30
      • 2012-11-08
      • 2011-10-15
      • 2015-03-25
      相关资源
      最近更新 更多