编写sonar插件 The following languages have no built-in quality profiles:xxx
生活随笔
收集整理的這篇文章主要介紹了
编写sonar插件 The following languages have no built-in quality profiles:xxx
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
sonar 自定義一種語言報錯:
2019.05.03 04:00:50 WARN web[][o.s.s.q.BuiltInQProfileDefinitionsBridge] Rule not found:[repository=configFiles, key=ConfigFiles-User-Check] 2019.05.03 04:00:50 INFO web[][o.s.s.q.BuiltInQProfileRepositoryImpl] Language configFiles is not installed,related quality profiles are ignored 2019.05.03 04:00:50 ERROR web[][o.s.s.p.Platform] Background initialization failed. Stopping SonarQube java.lang.IllegalStateException: The following languages have no built-in quality profiles: configfiles at com.google.common.base.Preconditions.checkState(Preconditions.java:197) at org.sonar.server.qualityprofile.BuiltInQProfileRepositoryImpl. ensureAllLanguagesHaveAtLeastOneBuiltInQP (BuiltInQProfileRepositoryImpl.java:100) atorg.sonar.server.qualityprofile.BuiltInQProfileRepositoryImpl.initialize (BuiltInQProfileRepositoryImpl.java:82) at org.sonar.server.qualityprofile.BuiltInQProfileLoader.start (BuiltInQProfileLoader.java:37) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)新定義的語言:configfiles,必須實現BuiltInQualityProfilesDefinition擴展點;
ProfileDefinition?is deprecated since 6.6, we should use?BuiltInQualityProfilesDefinition
以列出默認情況下應為您的語言啟用的規則。可以參考?https://github.com/SonarSource/sonar-custom-plugin-example
注意:BuiltInQualityProfilesDefinition 只有6.7以上版本才有的接口
package org.sonarsource.plugins.example.languages;import org.sonar.api.server.profile.BuiltInQualityProfilesDefinition;import static org.sonarsource.plugins.example.rules.FooLintRulesDefinition.REPO_KEY;/*** Default, BuiltIn Quality Profile for the projects having files of the language "foo"*/ public final class FooQualityProfile implements BuiltInQualityProfilesDefinition {@Overridepublic void define(Context context) {NewBuiltInQualityProfile profile = context.createBuiltInQualityProfile("FooLint Rules", FooLanguage.KEY);profile.setDefault(true);NewBuiltInActiveRule rule1 = profile.activateRule(REPO_KEY, "ExampleRule1");rule1.overrideSeverity("BLOCKER");NewBuiltInActiveRule rule2 = profile.activateRule(REPO_KEY, "ExampleRule2");rule2.overrideSeverity("MAJOR");NewBuiltInActiveRule rule3 = profile.activateRule(REPO_KEY, "ExampleRule3");rule3.overrideSeverity("CRITICAL");profile.done();} }rules:
package org.sonarsource.plugins.example.rules;import java.io.InputStream; import java.nio.charset.StandardCharsets; import org.sonar.api.server.rule.RulesDefinition; import org.sonar.api.server.rule.RulesDefinitionXmlLoader; import org.sonarsource.plugins.example.languages.FooLanguage;public final class FooLintRulesDefinition implements RulesDefinition {private static final String PATH_TO_RULES_XML = "/example/foolint-rules.xml";protected static final String KEY = "foolint";protected static final String NAME = "FooLint";public static final String REPO_KEY = FooLanguage.KEY + "-" + KEY;protected static final String REPO_NAME = FooLanguage.KEY + "-" + NAME;protected String rulesDefinitionFilePath() {return PATH_TO_RULES_XML;}private void defineRulesForLanguage(Context context, String repositoryKey, String repositoryName, String languageKey) {NewRepository repository = context.createRepository(repositoryKey, languageKey).setName(repositoryName);InputStream rulesXml = this.getClass().getResourceAsStream(rulesDefinitionFilePath());if (rulesXml != null) {RulesDefinitionXmlLoader rulesLoader = new RulesDefinitionXmlLoader();rulesLoader.load(repository, rulesXml, StandardCharsets.UTF_8.name());}repository.done();}@Overridepublic void define(Context context) {defineRulesForLanguage(context, REPO_KEY, REPO_NAME, FooLanguage.KEY);}}對應rules.xml:
<foolint-rules><rule><key>ExampleRule1</key><name>Example Rule 1</name><internalKey>ExampleRule1</internalKey><description>This is an example of rule defined thru the XML.</description><severity>BLOCKER</severity><cardinality>SINGLE</cardinality><status>READY</status><type>BUG</type><tag>example</tag><remediationFunction>CONSTANT_ISSUE</remediationFunction><remediationFunctionBaseEffort>2min</remediationFunctionBaseEffort></rule><rule><key>ExampleRule2</key><name>Example Rule 2</name><internalKey>ExampleRule2</internalKey><description>This is a other example of rule defined thru the XML.</description><severity>MAJOR</severity><cardinality>SINGLE</cardinality><status>BETA</status><type>CODE_SMELL</type><tag>example</tag><tag>convention</tag><remediationFunction>LINEAR</remediationFunction><remediationFunctionGapMultiplier>60min</remediationFunctionGapMultiplier> </rule><rule><key>ExampleRule3</key><name>Example Rule 3</name> <!-- max size is 200 --><internalKey>ExampleRule3</internalKey><description>This is a other example of rule defined thru the XML.</description><severity>CRITICAL</severity><cardinality>SINGLE</cardinality><status>DEPRECATED</status><type>VULNERABILITY</type><tag>example</tag><remediationFunction>LINEAR_OFFSET</remediationFunction><remediationFunctionGapMultiplier>10min</remediationFunctionGapMultiplier><remediationFunctionBaseEffort>30min</remediationFunctionBaseEffort> </rule> </foolint-rules>plugin?
package org.sonarsource.plugins.example;import org.sonar.api.Plugin; import org.sonar.api.config.PropertyDefinition; import org.sonarsource.plugins.example.hooks.DisplayIssuesInScanner; import org.sonarsource.plugins.example.hooks.DisplayQualityGateStatus; import org.sonarsource.plugins.example.languages.FooLanguage; import org.sonarsource.plugins.example.languages.FooQualityProfile; import org.sonarsource.plugins.example.measures.ComputeSizeAverage; import org.sonarsource.plugins.example.measures.ComputeSizeRating; import org.sonarsource.plugins.example.measures.ExampleMetrics; import org.sonarsource.plugins.example.measures.SetSizeOnFilesSensor; import org.sonarsource.plugins.example.rules.CreateIssuesOnJavaFilesSensor; import org.sonarsource.plugins.example.rules.FooLintIssuesLoaderSensor; import org.sonarsource.plugins.example.rules.FooLintRulesDefinition; import org.sonarsource.plugins.example.rules.JavaRulesDefinition; import org.sonarsource.plugins.example.settings.FooLanguageProperties; import org.sonarsource.plugins.example.settings.HelloWorldProperties; import org.sonarsource.plugins.example.settings.SayHelloFromScanner; import org.sonarsource.plugins.example.web.MyPluginPageDefinition;import static java.util.Arrays.asList;/*** This class is the entry point for all extensions. It is referenced in pom.xml.*/ public class ExamplePlugin implements Plugin {@Overridepublic void define(Context context) {// tutorial on hooks// http://docs.sonarqube.org/display/DEV/Adding+Hookscontext.addExtensions(DisplayIssuesInScanner.class, DisplayQualityGateStatus.class);// tutorial on languagescontext.addExtensions(FooLanguage.class, FooQualityProfile.class);context.addExtension(FooLanguageProperties.getProperties());// tutorial on measurescontext.addExtensions(ExampleMetrics.class, SetSizeOnFilesSensor.class, ComputeSizeAverage.class, ComputeSizeRating.class);// tutorial on rulescontext.addExtensions(JavaRulesDefinition.class, CreateIssuesOnJavaFilesSensor.class);context.addExtensions(FooLintRulesDefinition.class, FooLintIssuesLoaderSensor.class);// tutorial on settingscontext.addExtensions(HelloWorldProperties.getProperties()).addExtension(SayHelloFromScanner.class);// tutorial on web extensionscontext.addExtension(MyPluginPageDefinition.class);context.addExtensions(asList(PropertyDefinition.builder("sonar.foo.file.suffixes").name("Suffixes FooLint").description("Suffixes supported by FooLint").category("FooLint").defaultValue("").build()));} }修改之后還是一直報:The following languages have no built-in quality?profiles: configfiles
原因:LANGUAGE_KEY = "congfigFiles" 不是大寫,只能是configfiles? 巨坑!!!
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的编写sonar插件 The following languages have no built-in quality profiles:xxx的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编写sonar 插件:No SqaleS
- 下一篇: java 正则表达