java - SonarQube 5.6 是否执行使用 sonar-plugin-api 版本 4.5.2 开发的插件中的装饰器?

标签 java c# sonarqube sonarqube-web

我安装了sonarqube 5.6,并下载了C#插件。

我决定扩展 C# 插件,因此我继续下载已安装插件的代码(版本 5.3.2)。

C#插件项目引用了sonar-plugin-api版本4.5.2

我添加了需要针对项目级别进行计算的新指标,因此,按照文档,我创建了一个 Decorator .

public class CSharpMyDecorator implements Decorator{
    private static final Logger LOG = LoggerFactory.getLogger(CSharpMyDecorator.class);

    @Override
    public boolean shouldExecuteOnProject(Project arg0) {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public void decorate(Resource resource, DecoratorContext context) {

        LOG.info(resource.getName() + " Is Project: " + Scopes.isProject(resource) +" Is project not Module:" + Qualifiers.isProject(resource, false));


        if (Scopes.isProject(resource) && Qualifiers.isProject(resource, false)) {
            double files = 0d;
            double percentage = 0d;
            LOG.info("files: "+context.getMeasure(CoreMetrics.FILES).getValue());

            for (Measure measure : context.getChildrenMeasures(MyMetrics.FILES_DONT_PASS_FUNCTION_THRESHOLD)) {
                files += measure.getValue();
            }

            percentage = files / context.getMeasure(CoreMetrics.FILES).getValue();
            context.saveMeasure(MyMetrics.PERC_FILES_DONT_PASS_FUNCTION_THRESHOLD, percentage);
        }

    }

}

我在插件中添加类:

public class CSharpPlugin extends SonarPlugin {

  public static final String LANGUAGE_KEY = "cs";
  public static final String LANGUAGE_NAME = "C#";

  public static final String FILE_SUFFIXES_KEY = "sonar.cs.file.suffixes";
  public static final String FILE_SUFFIXES_DEFVALUE = ".cs";

  public static final String CSHARP_WAY_PROFILE = "Sonar way";

  public static final String REPOSITORY_KEY = "csharpsquid";
  public static final String REPOSITORY_NAME = "SonarQube";

  public static final String IGNORE_HEADER_COMMENTS = "sonar.cs.ignoreHeaderComments";
  public static final String NUMBER_FUNCTION_THRESHOLD = "sonar.cs.numberFunctionThreshold";
  public static final String NUMBER_LOC_THRESHOLD = "sonar.cs.numberLocThreshold";

  @Override
  public List getExtensions() {
    ImmutableList.Builder builder = ImmutableList.builder();

    builder.add(
      CSharp.class,
      CSharpSonarRulesDefinition.class,
      CSharpSonarWayProfile.class,
      CSharpCommonRulesEngine.class,
      CSharpCommonRulesDecorator.class,
      CSharpSourceCodeColorizer.class,
      RuleRunnerExtractor.class,
      CSharpSensor.class,
      CSharpCPDMapping.class,
      SonarLintProfileExporter.class,
      SonarLintFakeProfileImporter.class,
      RoslynProfileExporter.class,
      MyMetrics.class,
      CSharpMyDecorator.class
      );

    builder.addAll(CSharpFxCopProvider.extensions());
    builder.addAll(CSharpCodeCoverageProvider.extensions());
    builder.addAll(CSharpUnitTestResultsProvider.extensions());
    builder.addAll(CSharpMsBuildIntegrationProvider.extensions());
    builder.addAll(RoslynProfileExporter.sonarLintRepositoryProperties());

    return builder.build();
  }

}

当我执行分析时,既不会创建指标,也不会存储度量。

查看生成的日志(我启用了详细选项),我没有发现任何对装饰器执行的引用。甚至装饰器中的代码也没有预期的 LOG 条目。

我正在使用 MSBuild.SonarQube.Runner.exe 版本 2.0

为什么不调用装饰器?是 SonarQube 版本的问题吗?

最佳答案

扩展点装饰器在 5.2 版本中被删除,因为它不是为 5.x 系列最需要的功能之一而设计的:将扫描仪与数据库隔离。

更多详情请访问 http://docs.sonarqube.org/display/DEV/API+Changes并在群里https://groups.google.com/forum/#!forum/sonarqube

关于java - SonarQube 5.6 是否执行使用 sonar-plugin-api 版本 4.5.2 开发的插件中的装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40663669/

相关文章:

java - 将RCP-Plugin集成到自主开发的SWT/Swing-Context中

java - 从 Swing App 中的监听器返回信息

java - 从2.2.0版本开始,JMX控制台中不显示Spring执行器指标

maven - maven-sonar-plugin 可以进行本地分析吗?

api - Sonarqube API 单类测试覆盖率

java - 如何在 Cucumber JVM 中为每次新运行设置不同的数据(语言)多次运行相同的特征文件

c# - 如何在 VS 2017 中将 csproj 文件更改回旧格式

c# - 如果我有对象 ID,如何使用 REST API 获取 AzureAD 中对象的显示名称?

c# - 如何使用 iText7 将 .p7s 字节数组插入到 PDF 中?

java - 根据文件名更改 SonarQube 的质量配置文件