SonarQube 插件中未调用 MeasureComputer 扩展
MeasureComputer extensions not called in SonarQube plugin
我正在尝试开发 SonarQube plugin.I 已经配置并安装了 SonarQube 5.3,我正在使用 SonarQube Scanner 2.5 启动器来分析 SonarQube.I 的项目已经用 [=24] 完成了一个示例=] RandomMeasureComputer 实现 MeasureComputer 以聚合度量。
public class RandomMeasureComputer implements MeasureComputer {
@Override
public MeasureComputerDefinition define(MeasureComputerDefinitionContext defContext) {
return defContext.newDefinitionBuilder()
.setOutputMetrics(ExampleMetrics.RANDOMMETRIC.getKey())
.build();
}
@Override
public void compute(MeasureComputerContext context) {
// This method is executed on the whole tree of components.
// Bottom-up traversal : files -> directories -> modules -> project
double value;
if (context.getComponent().getType() == Component.Type.FILE) {
// set a random value on files
value = RandomUtils.nextDouble();
} else {
// directory, module or project: sum values of children
value = 0.0;
for (Measure childMeasure : context.getChildrenMeasures(ExampleMetrics.RANDOMMETRIC.getKey())) {
value += childMeasure.getDoubleValue();
}
}
context.addMeasure(ExampleMetrics.RANDOMMETRIC.getKey(), value);
}
@Override
public String toString() {
return getClass().getSimpleName();
}
}
我还在方法 org.sonar.api.SonarPlugin#getExtensions() 中添加了这个 class。
public final class ExamplePlugin extends SonarPlugin {
@Override
public List getExtensions() {
List extensions = new ArrayList();
extensions.addAll(ExampleProperties.definitions());
extensions.add(ExampleMetrics.class);
extensions.addAll(asList(FooLintRulesDefinition.class, FooLintProfile.class, MyCustomJavaRulesDefinition.class));
extensions.addAll(asList(ExampleSensor.class, RandomMeasureComputer.class, IssueSensor.class, ListAllIssuesPostJob.class, FooLintIssuesLoaderSensor.class));
return extensions;
}
}
但是当我尝试使用我的 SonarQube 插件分析一个项目时,我没有在 RandomMeasureComputer 中接到电话 class。
我经历了 http://docs.sonarqube.org/display/DEV/Developing+Plugins 但是
我不确定我错过了什么。请帮助我。
从 SonarQube 5.2 开始,项目分析会在服务器端触发 Background Task。 Measure Computer 在此服务器端任务中执行,这解释了为什么您看不到在客户端调用的 class(其中分析是 运行 ).
服务器端调试,来自Julien L.投稿:
Yes, it's possible to debug a MeasureComputer class. For that you need to put the server in DEBUG : set the following parameter in the sonar.properties file :
sonar.web.javaAdditionalOpts=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8001
我正在尝试开发 SonarQube plugin.I 已经配置并安装了 SonarQube 5.3,我正在使用 SonarQube Scanner 2.5 启动器来分析 SonarQube.I 的项目已经用 [=24] 完成了一个示例=] RandomMeasureComputer 实现 MeasureComputer 以聚合度量。
public class RandomMeasureComputer implements MeasureComputer {
@Override
public MeasureComputerDefinition define(MeasureComputerDefinitionContext defContext) {
return defContext.newDefinitionBuilder()
.setOutputMetrics(ExampleMetrics.RANDOMMETRIC.getKey())
.build();
}
@Override
public void compute(MeasureComputerContext context) {
// This method is executed on the whole tree of components.
// Bottom-up traversal : files -> directories -> modules -> project
double value;
if (context.getComponent().getType() == Component.Type.FILE) {
// set a random value on files
value = RandomUtils.nextDouble();
} else {
// directory, module or project: sum values of children
value = 0.0;
for (Measure childMeasure : context.getChildrenMeasures(ExampleMetrics.RANDOMMETRIC.getKey())) {
value += childMeasure.getDoubleValue();
}
}
context.addMeasure(ExampleMetrics.RANDOMMETRIC.getKey(), value);
}
@Override
public String toString() {
return getClass().getSimpleName();
}
}
我还在方法 org.sonar.api.SonarPlugin#getExtensions() 中添加了这个 class。
public final class ExamplePlugin extends SonarPlugin {
@Override
public List getExtensions() {
List extensions = new ArrayList();
extensions.addAll(ExampleProperties.definitions());
extensions.add(ExampleMetrics.class);
extensions.addAll(asList(FooLintRulesDefinition.class, FooLintProfile.class, MyCustomJavaRulesDefinition.class));
extensions.addAll(asList(ExampleSensor.class, RandomMeasureComputer.class, IssueSensor.class, ListAllIssuesPostJob.class, FooLintIssuesLoaderSensor.class));
return extensions;
}
}
但是当我尝试使用我的 SonarQube 插件分析一个项目时,我没有在 RandomMeasureComputer 中接到电话 class。
我经历了 http://docs.sonarqube.org/display/DEV/Developing+Plugins 但是 我不确定我错过了什么。请帮助我。
从 SonarQube 5.2 开始,项目分析会在服务器端触发 Background Task。 Measure Computer 在此服务器端任务中执行,这解释了为什么您看不到在客户端调用的 class(其中分析是 运行 ).
服务器端调试,来自Julien L.投稿:
Yes, it's possible to debug a MeasureComputer class. For that you need to put the server in DEBUG : set the following parameter in the sonar.properties file :
sonar.web.javaAdditionalOpts=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8001