我是 SonarQube 插件开发的新手。我想创建一个规则,其中针对该规则的每个问题使用以下公式给出技术部门补救措施:dept = constant_duration * effort其中为每个问题提供了不同的努力,为规则指定了constant_duration 。
我设法创建了以下规则定义:
public class SodaRuleDefinition
implements RulesDefinition
{
public static final String REPO_KEY = "soda";
public static final String SODA_METHOD_COVERAGE_KEY = "soda-method-coverage";
@Override
public void define(Context context) {
NewRepository repository = context.createRepository(REPO_KEY, Java.KEY);
repository.setName("SoDA");
repository.createRule(SODA_METHOD_COVERAGE_KEY)
.setName("SoDA aggregated method coverage")
.setMarkdownDescription("foo")
.setDebtSubCharacteristic("UNIT_LEVEL")
.setDebtRemediationFunction(
new DefaultDebtRemediationFunction(
DebtRemediationFunction.Type.LINEAR, "1h", null));
repository.done();
}
}
然后在 Sensor 类中,我创建了这样的问题:
public class SodaCoverageSensor
implements org.sonar.api.batch.Sensor{
// ...
@Override
public void analyse(Project project, SensorContext sc) {
// ...
sc.newIssue()
.at(new DefaultIssueLocation()
.on(new DefaultInputFile(project.getKey(), resource.getPath()))
.message(String.format("Coverage (%f) is lower than %f.", entry.getValue(), limit)))
.effortToFix(1.0)
.forRule(ruleKey)
.save();
// ...
}
最后,我通过插件类注册了我所有的类,并在 SonarQube 的 GUI 上激活了我的规则以获取声纳方式质量配置文件。
public class SonarQubePlugin
extends org.sonar.api.SonarPlugin{
@Override
public List getExtensions() {
return Arrays.asList(
SodaClassCoverageMetric.class,
SodaCoverageSensor.class,
SodaRuleDefinition.class
);
}
}
一切正常,我的代码已执行(我三次检查),规则和问题按预期创建,执行期间没有错误,日志文件也没有。只是技术部门没有显示在用户界面上!我发现了相同类型的其他问题DebtRemediationFunction.Type.LINEAR
,它们工作得很好。
任何关于如何克服这个问题的线索、帮助或建议都非常感谢!