【问题标题】:Own Sonar Plugin - How to set the Language?自己的声纳插件 - 如何设置语言?
【发布时间】:2013-04-10 07:21:11
【问题描述】:

我对 Sonar 比较陌生——尤其是在编写我自己的 Sonar 插件方面。经过一些成功的试验后,我现在陷入了困境。我编写了一个简单的插件,它只应该将源文件(*.abap -Files)传输到声纳服务器。

在我的插件中我有一个 AbapLangauge(从 AbstractLangauge 扩展)

package sonarplugin;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.resources.AbstractLanguage;

public class AbapLanguage extends AbstractLanguage {
  public static final String DEFAULT_SOURCE_SUFFIXES = "abap";
  public static final String KEY = "sap";

  private String[] fileSuffixes;
  private static final Logger LOG = LoggerFactory.getLogger(AbapLanguage.class);

  public AbapLanguage() {   
    super(KEY, "sap");
    LOG.info("SETTING LANGUAGE TO SAP: " + KEY);
    fileSuffixes = createStringArray(null, DEFAULT_SOURCE_SUFFIXES);
  }

  public String[] getFileSuffixes() {
      return fileSuffixes;
  }

  private String[] createStringArray(String[] values, String defaultValues) {
    if (values == null || values.length == 0) {
      return StringUtils.split(defaultValues, ",");
    }
    return values;
  }

}

我还有一个 SourceImporter

package sonarplugin;

import org.sonar.api.batch.AbstractSourceImporter;

public final class AbapSourceImporter extends AbstractSourceImporter {

public AbapSourceImporter(AbapLanguage language) {
    super(language);
}
}

我将这两个类注册为扩展点。 在我想用我在 sonar-project.properties 中设置的 sonar-runner 分析的测试项目中

sonar.language=sap

但是当我启动声纳跑步者时,我得到了以下错误:

15:11:36.148 INFO  - -------------  Executing Project Scan
15:11:36.386 INFO  - ABAPIMPORTGERPLUGIN has just started.
15:11:36.924 INFO  - Install JDBC driver
15:11:36.929 INFO  - Apply project exclusions
15:11:36.937 WARN  - H2 database should be used for evaluation purpose only
15:11:36.937 INFO  - Create JDBC datasource for jdbc:h2:tcp://localhost:9092/sonar
15:11:37.051 INFO  - Initializing Hibernate
15:11:42.669 INFO  - -------------  Inspecting MeinTestprojekt
15:11:42.683 INFO  - Load module settings
15:11:43.062 INFO  - ABAPIMPORTGERPLUGIN has just started.
15:11:43.244 INFO  - SETTING LANGUAGE TO SAP: sap
INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
INFO: Total time: 15.544s
INFO: Final Memory: 10M/158M
INFO: ------------------------------------------------------------------------
ERROR: Error during Sonar runner execution
ERROR: Unable to execute Sonar
ERROR: Caused by: You must install a plugin that supports the language 'sap'

有人可以帮助我吗?为什么 sonar-runner 说没有支持语言“sap”的插件?我的插件配置不对吗?

提前致谢 伯恩哈德

【问题讨论】:

    标签: java plugins sonarqube analysis sonar-runner


    【解决方案1】:

    在您的具体情况下,问题在于您没有为新语言定义任何规则存储库(甚至是空的),因此 Sonar 认为您的新语言不受支持。

    更一般地说,对您来说最好的选择是查看我们为 Sonar 开发的一些开源语言插件。比如你可以去看看Javascript plugin

    【讨论】:

      【解决方案2】:

      可能出现此错误的更多原因:

      1. 您没有在插件类的 getExtensions() 方法中定义语言类
      2. 在您的 SonarQube 网站中,没有为您的语言创建配置文件。单击 Quality-Profiles --> 选择您的语言旁边的创建按钮 --> 单击创建。然后,单击“设置为默认值”。 (注意:只有当 getExtensions() 已按照 1 中的描述正确实施时,您的语言才会出现。)

      【讨论】:

        【解决方案3】:

        刚刚经历了同样的过程,似乎需要的粗略的东西(并由您的插件的 getExtensions() 方法宣传)是:

        • org.sonar.api.resources.AbstractLanguage 的子类 - 构造函数对 super 的调用将语言代码及其名称作为两个参数提供
        • org.sonar.api.server.rule.RulesDefinition 的实现
        • org.sonar.api.profiles..ProfileDefinition 的子类,返回一个 RulesProfile 对象,其中引用了您的语言代码
        • 加上您的插件实际执行任何有用工作所需的其他扩展点的任何实现 - 至少可能是 org.sonar.api.batch.Sensor 实现

        【讨论】:

          猜你喜欢
          • 2013-04-11
          • 2012-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-22
          • 2012-09-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多