编写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 SqaleSubCharacteristic annotation was found on class xxx
报错信息: org.jruby.rack.RackInitializationException: java.lang.IllegalArgumentException:No SqaleSubChar ...
- Gradle 1.12用户指南翻译——第三十五章. Sonar 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- 使用Qt编写模块化插件式应用程序
动态链接库技术使软件工程师们兽血沸腾,它使得应用系统(程序)可以以二进制模块的形式灵活地组建起来.比起源码级别的模块化,二进制级别的模块划分使得各模块更加独立,各模块可以分别编译和链接,模块的升级不会 ...
- skywalking原理_Skywalking系列博客6手把手教你编写 Skywalking 插件
点击上方 IT牧场 ,选择 置顶或者星标技术干货每日送达! 前置知识 在正式进入编写环节之前,建议先花一点时间了解下javaagent(这是JDK 5引入的一个玩意儿,最好了解下其工作原理):另外,S ...
- 编写OD插件将IDA中分析出来的函数名导入到OD中
逆向程序的时候,喜欢用IDA静态分析,用OD动态调试,如果把IDA分析出来的函数名称都导入到OD中,调试的时候就知道哪些函数不需要再看了.以前我一直用GODUP的map loader,但是有些时候感觉 ...
- 使用Lua编写whireshark插件
whireshark支持Lua.C.C++编写的插件 在这里,我简单介绍如何使用Lua编写whireshark插件. 一.插件的存放位置 whireshark插件分为个人插件和全局插件,在window ...
- 自己编写jQuery插件之表单验证
自己编写jQuery插件之表单验证 吐个嘈先:最近状态不咋滴,真是什么都不想干,不想上班,做什么都没动力,觉得没意思.不想这样,不想这样,快让这种情绪消失吧,忽忽.... 表单验证在项目中用的还是比较 ...
- 如何编写 Nagios 插件 (http://zener.blog.51cto.com/937811/727685)
如何编写 Nagios 插件 Nagios 的最激动人心的方面是可以轻松地编写您自己的插件,只需要了解一些简单的指导原则即可.为了管理插件,Nagios 每次在查询一个服务的状态时,产生一个子进程,并 ...
- maven插件编写_编写Maven插件的提示
maven插件编写 最近,我花了很多时间为Maven编写插件或在其中工作. 它们简单,有趣且有趣. 我以为我会分享一些技巧,使编写它们时的生活更轻松. 提示1:将任务与Mojo分开 最初,您将把moj ...
最新文章
- 51nod 最长公共子序列测试 【LCS+回溯】
- Gartner:解开关于人工智能的六个迷思
- 强大的DataGrid组件[1]【转】
- 从零开始-android 4.2之旅
- jupter中没有显示conda中的环境
- Window捕获消息机制-C#
- 甩开镣铐的精神舞蹈:推荐长篇小说《炼狱之花》
- arguments使用
- 字节3-1前端面试官自学Vue的正确姿势
- 城市运行一网统管_全国率先!“一屏观天下、一网管全城”,临港城市运行“一网统管”平台启动建设...
- python的匿名函数返回值_Python匿名函数返回值输出问题望指点
- Hadoop(五)HBase基础
- java高并发日志_高并发下log4j的性能瓶颈
- Android 三星手机不能调起应用市场
- 牛的障碍Cow Steeplechase
- 统计数组中出现次数最多的元素并输出
- c语言汇编程序100例,汇编语言100例
- MATLAB 数学应用 微分方程 常微分方程 选择ODE求解器
- 重现Struts1的操纵classLoader漏洞
- dpkg制作deb包详解
热门文章
- redis+celery+django设置外网可访问
- error: missing or invalid dependency detected while loading class file 'RDD.class'.
- ubuntu下面调整Atom的python运行结果中的字体大小
- 数值方法:数值微分与数值积分
- OpenCV学习笔记九-Canny边缘检测
- 2011年5月19日盘后分析:把握行情运行主线 静待大盘明确信号
- SAS,SATA普及文档
- tomcat的根路径设置
- 2015级C++第2周实践项目
- Retrofit2/OkHttp 重写覆盖headers 与 不重写覆盖Headers