- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如何保留 Sonar 属性 using Sonar's web service java client ?
[编辑:我现在意识到 Web 服务客户端不适用于开发插件;相反,应该使用 Sonar API 中的其他类。请参阅我接受的答案。]
我打算为 Sonar 制作一个插件。与此同时,我正在熟悉 Sonar 的 API,特别是 Sonar 的 Web 服务 Java 客户端。我正在尝试找出如何保留 Sonar 属性。我编写了以下代码:
package testers;
import org.sonar.wsclient.Sonar;
import org.sonar.wsclient.services.Property;
import org.sonar.wsclient.services.PropertyCreateQuery;
import org.sonar.wsclient.services.PropertyQuery;
public class PropertyPersister {
public static Sonar localSonar;
public static Property sonarStartTime;
public static PropertyQuery findStartTime;
public static Property testProperty;
public static PropertyQuery findTestProperty;
public static String testKey = "testKey";
public static String testValue = "testValue";
/**
* @param args
*/
public static void main(String[] args) {
//localSonar = Sonar.create("http://localhost:9000");//pointed to my instance of Sonar
//EDIT: using this line instead, but it still gives the same stack trace.
localSonar = Sonar.create("http://localhost:9000", "admin", "admin");//pointed to my instance of Sonar
findStartTime = PropertyQuery.createForKey("sonar.core.startTime");//creating query for a key I know exists
sonarStartTime = localSonar.find(findStartTime);//retrieve property object from my Sonar's database
System.out.println(sonarStartTime);//print out this object
PropertyCreateQuery testCreateQuery = new PropertyCreateQuery(testKey, testValue);//Query to create test property
localSonar.create(testCreateQuery);//With this line, I'm trying to persist my test property
findTestProperty = PropertyQuery.createForKey(testKey);//creating query for retrieving test property
testProperty = localSonar.find(findTestProperty);//line 36: retrieve property object from my Sonar's database
System.out.println(testProperty);//print test property
}
}
此代码打印出已经存在的 sonarStartTime 属性:
[sonar.core.startTime:2013-03-14T08:05:42-0700]
然后是倒数第二行抛出的空指针异常。异常消息包括:
org.sonar.wsclient.unmarshallers.UnmarshalException: Can not parse the response of query /api/properties/testKey?: {"err_code":404,"err_msg":"Property not found: testKey"}
使用 MySQL Workbench,我确认我的测试属性确实从未被持久化。显然,我的处理方式是错误的。因此,重申我的问题,我如何在 Sonar 中保留属性using Sonar's web service java client ?
[编辑]这是带有堆栈跟踪的完整控制台输出:
[sonar.core.startTime:2013-03-14T08:05:42-0700]
Exception in thread "main" org.sonar.wsclient.unmarshallers.UnmarshalException: Can not parse the response of query /api/properties/testKey?: {"err_code":404,"err_msg":"Property not found: testKey"}
at org.sonar.wsclient.Sonar.find(Sonar.java:56)
at testers.PropertyPersister.main(PropertyPersister.java:36)
Caused by: java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to java.util.ArrayList
at org.sonar.wsclient.JdkUtils.getArraySize(JdkUtils.java:87)
at org.sonar.wsclient.unmarshallers.AbstractUnmarshaller.toModel(AbstractUnmarshaller.java:34)
at org.sonar.wsclient.Sonar.find(Sonar.java:54)
... 1 more
最佳答案
Sonar 简要解释了如何重用其 API 的现有组件 here 。
您可以简单地在尝试保留属性的类的构造函数中声明 DatabaseSession。例如:
import org.sonar.api.database.DatabaseSession;
import org.sonar.api.database.configuration.Property;
import org.sonar.api.resources.Project;
import org.sonar.api.resources.Resource;
public class PropertyPersister{
private DatabaseSession session;
private Project project;
private Property newProperty;
public PropertyPersister (DatabaseSession session, Project project){
this.session = session;
this.project = project;
}
private void persistProperty (Resource resource) {
int resourceId= resource.getId();
newProperty = new Property("sonar.myFabulousProperty", "someValue", resourceId);
session.save(newProperty);
}
}
关于java - 使用Sonar的Web服务java客户端来保存属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15443096/
在为jhipster配置以下docker容器之后,除了声纳,其他一切都很好: docker run --name jhipster -w / home / jhipster / app -v〜/ jh
最新的 3.3 sonar-maven-plugin 和 5.6 LTS 作为网络服务器。 使用 mvn sonar:sonar 运行 Sonar 分析( Scanner for Maven ) 忽略
我有一个 cobertura.ser 文件,是在集成测试和系统测试时生成的。现在我想将我的覆盖范围导入 Sonar 服务器。 如何实现这一点,以便在执行 mvn sonar:sonar 时覆盖范围应考
场景:我们有一个 Jenkins maven 构建,它在父 pom 上执行 Sonar : Sonar 。我希望此构建的所有模块都显示为单个 Sonar 项目。目前,我们只有一个带有子模块的 Sona
我有一个看起来像这样的 build.xml 文件: 当我运行文件时,我得到: The prefix "sonar" for element "sonar:sonar" is
我尝试使用标准 maven sonar:sonar 目标在 Jenkins 上使用 java 项目运行 Sonar 分析,并使用后步骤 >> 执行 SonarQube 扫描仪。我使用的maven目标是
我想知道 sonar.projectKey、sonar.projectName 和 sonar.projectVersion 是否有任何标准。 我正在 git 环境中工作,需要对同一 git 存储库的
我有一个很大的困惑,当我们有 Sonar 服务器时 Sonar 扫描仪有什么用?当我使用 soarqube 服务器分析一个项目时,它进行了分析并且运行良好。我仍然很困惑为什么我们也需要扫描仪。 与ec
Sonar 与 jenkins 一起正常运行了 6 个月,没有出现任何故障。从上周开始,我看到一些 jenkins 作业出现以下错误,导致作业失败。 [ERROR] Failed to execute
鉴于相同的代码和具有相同规则的相同 SonarQube 服务器,我在使用 mvn sonar:sonar 与 sonar-scanner 扫描时发现的错误和漏洞数量截然不同。 code> CLI 和
我正在编写一个 Sonarqube Java 自定义规则,但在我尝试分析我的代码时一直出现此错误: "SonarQube is unable to analyze file 'File Path' o
我正在尝试将 SonarQube 与 Azure Devops 集成。我已在 SonarQube 管理员中完成配置(管理 > 配置 > 常规设置 > ALM 集成,选择 Azure DevOps 选项
我正在尝试将 SonarQube 与 Azure Devops 集成。我已在 SonarQube 管理员中完成配置(管理 > 配置 > 常规设置 > ALM 集成,选择 Azure DevOps 选项
我想与Jenkins一起针对Maven 2项目启动SonarQube分析。我首先在构建配置中使用了目标sonar:sonar。 但是我刚刚找到了Jenkins的SonarQube插件。为什么要使用它?
将Sonar 4.2(正常运行)与gradle(已测试版本1.11和1.12)一起使用,配置了sonar-runner: allprojects { if (rootProject == pr
我将 Sonar 与 Jenkins 一起使用以进行持续集成和代码分析。我learned该 Sonar 默认包括 Checkstyle、FindBugs、JaCoCo、PMD ,所以我们不需要配置项目
我们想在我们的项目中使用 SonarQube 和一些 CI 工具。 Sonar 服务器 url 在主 pom.xml 中配置。 项目中有几个团队成员。那么当一个团队成员在本地执行 sonar:sona
命令 mvn sonar:sonar 执行的 Maven 生命周期阶段是什么? 虽然我看到了在屏幕上运行的日志,但在非常高的水平上,我发现了测试、安装。 考虑下面的例子, 我有一个像下面这样的mave
我有几个 groovy/grails 项目,我正在使用 sonar-runner 来分析它们。他们工作得很好,直到今天我开始收到这个错误: ERROR: Error during Sonar runn
当我运行声纳时,我的代码覆盖率总是为 0。我使用的是三叶草。 pom.xml 文件中的条目下方 11 1.18.20 Hoxton.SR11
我是一名优秀的程序员,十分优秀!