- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
使用 Java 插件 4.9.0.9858 运行 SonarQube 6.4。我编写了一条规则来确认内部开发的 Maven 项目正在导入包含各种库的标准版本号的父 POM 文件。我已成功编码、单元测试、部署和激活质量配置文件中的规则。但是,当我使用该质量配置文件对 Maven 项目运行扫描时,不会触发该规则。
我可以看到类 org.sonar.java.xml.XmlAnalyzer
决定了通常为 xml 文件和特别是 pom 文件触发哪些规则。具体来说,XMLAnalyzer 选择作为 org.sonar.java.xml.maven.PomChecks
实例的所有规则以应用于 pom.xml 文件。
问题是,我的自定义规则是类org.sonar.java.xml.maven.PomCheck
的实例,如下
import org.sonar.java.xml.maven.PomCheck;
...snip...
@Rule( key = "UseParentPOM" )
public class UseParentPOM implements PomCheck {
...snip...
这种“实现 PomCheck”方法正是 java 插件提供的规则(如 GroupIdNamingConventionCheck
)将自己定义为 PomChecks 的方式——并且它们正在在我的扫描运行期间被选中。我已经检查过我正在使用与 SQ 安装所使用的插件库版本相同的插件库版本来编译我的自定义规则。运行 sonar-scanner-debug 并附加到正在运行的进程显示我的 UseParentPOM 规则实际上在 XMLAnalyzer 用于搜索候选规则的访问者列表中。但是“visitor instanceof PomCheck”的具体情况返回false。因此,我的规则没有添加到 pom 规则列表中,也没有在扫描 pom.xml 时触发。
显然我的规则类不是 XMLAnalyzer 期望的 PomCheck,但是我做错了什么让它成为 PomCheck 的实例?
更新
一些进一步的挖掘表明,提供类 java-frontend-4.9.0.9858.jar 的 .jar 文件在基础 sonar-java-plugin-4.9.0.9858.jar 和我的自定义 java-rules- 中1.0-SNAPSHOT.jar。我的调试运行显示 SonarQube 似乎为扩展目录中找到的每个插件 .jar 启动了单独的类加载器。因此,就 SQ 而言,确实有 2 个“org.sonar.java.xml.maven.PomCheck”类。因此,我原来的问题。
因此,我试图通过将所有 Sonar 相关依赖项的范围限定为
因此,我似乎陷入了一个无法解决的困境——如果我在我的自定义 .jar 中包含 PomCheck,SQ 可以正常启动,但不会将我的自定义规则识别为“真正的”PomCheck。如果我不在我的自定义 .jar 中包含 PomCheck,SQ 根本不会启动。所以现在我真的进退两难了 - 请帮忙。
其他详细信息
Re: Nicholas B的请求,注册我的自定义规则的代码如下
public final class MyRulesList {
...snip...
public static List<Class<? extends JavaCheck>> getChecks() {
return ImmutableList.<Class<? extends JavaCheck>>builder().addAll(getJavaChecks()).addAll(getJavaTestChecks()).build();
}
public static List<Class<? extends JavaCheck>> getJavaChecks() {
return ImmutableList.<Class<? extends JavaCheck>>builder()
.add(PackageNaming.class)
.add(LoggingLevels.class)
.add(UseParentPOM.class)
.build();
}
... snip ...
这段代码是直接从 Writing Custom Java Rules 101 站点复制的。据我所知,所有 3 个自定义类都已正确注册 - 我可以在 Web 控制台 UI 中看到它们并将它们添加到那里的 Quality Gate。规则 PackageNaming/LoggingLevels 和规则 UseParentPOM 之间的唯一区别是 UseParentPOM 实现 PomCheck 接口(interface),而不是 JavaCheck。然而,由于类 PomCheck 只不过是类 JavaCheck 的包装器,这似乎是注册 UseParentPom 类的正确方法,例如就像任何其他 JavaCheck 一样。但也许不是?
最佳答案
简而言之:SonarJava 不支持 POM 文件的自定义检查(即自定义 PomCheck)。
更多详情
根据 Java custom rules tutorial ,必须通过将自定义规则提供给 getJavaChecks
(针对源文件进行检查)或 getJavaTestChecks
(针对测试文件进行检查)来激活自定义规则。问题是 pom.xml 文件不属于这两个类别中的任何一个,它们属于检查特定规则的“XML 文件桶”。
形象化的一个好方法是看一眼 SonarJava 的 CheckList.java ,请注意专用的 getXmlChecks
和 getMavenChecks
。这些是实际针对扫描程序索引的 XML 文件运行的检查。
具体来说
虽然您可以自由地向 getJavaChecks
或 getJavaTestChecks
添加自定义规则,但 SonarJava API 不支持向 getMavenChecks
添加规则(您可以尝试但它实际上什么都不做)。您的整体分析非常准确,但事实是只有包含 api 的包才能通过类加载器 (example) 访问,而不是 PomCheck。
我不知道这方面有任何更改计划。
“跳出框框思考”的建议
SonarXML支持使用 XPath 表达式的自定义规则(参见 extension guide )。通过一些 XPath 体操,您可以考虑扩展规则 xml:XPathCheck - 跟踪违反 XPath 规则的情况。
关于java - SonarQube 无法识别自定义 PomCheck 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45884177/
我需要在 nginx-ingress 版本上允许来自多个来源的请求:http://localhost:4200、http://localhost:4242 等1.7.1.但我无法对多个来源执行此操作,
我正在部署我使用 APIGILITY 开发的 API到 IIS。由于 IIS 不支持 .htaccess,我试图从 .htaccess 文件的内容创建 web.config 文件。我使用 IISv7.
我正在尝试更改上面 css 样式中的“宽度”规则。在“inspect element”中你可以看到宽度是1008px。我不希望它是 1008px 但它不会让我在 css 样式中更改它你可以看到它被“删
外部css赋值有2种方法,我用的是第一种;大多数网站使用第二种方法。我想知道我是否做错了! 第一种方法: 为几乎每个 css 规则创建一个类并在任何地方使用它们。 blah blah .f_
RDF使用 WEB 标识符 (URIs) 来标识资源,使用属性和属性值来描述资源 RDF 资源、属性和属性值 RDF使用 WEB 标识符来标识事物,并通过属性和属性值来描述资源。 关于资源、属性
我想挖掘特定的 rhs 规则。文档中有一个示例证明这是可能的,但仅适用于特定情况(如下所示)。先来一个数据集来说明我的问题: input {b=100002} 0.2500000 0.250000
我想让 nginx 从网站根目录(:http://localhost:8080/)提供一个静态文件,但它为我的代理通行证提供服务;它提供“/”规则而不是“=/”。 这是我的 nginx 配置的样子:
根据gnu make documentation , 如果一个规则通过一次调用生成多个目标(例如,一个配方执行一个带有多个输出文件的工具),你可以使用 '&:' 规则语法来告诉 make。但是,当在多
我已阅读Firebase Documentation并且不明白什么是 .contains()。 以下是文档中 Firebase 数据库的示例规则: { "rules": { "rooms"
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
我正在尝试做一些多态性练习,但我无法弄清楚这种多态性是如何工作的。我没有找到任何关于这种练习的深入信息。希望大家能给我一些解释。 练习1: class Top { public void m(
为了调试复杂的 XSLT 转换,我将其分为几个部分:首先构建 %.1.xml,然后使用它构建 %.2.xml ,最后构建 %.3.xml。一切正常,但如果我要求 Make 构建最后一个,Make 总是
我尝试了 hacerrank 的 slove 练习 Click我不知道如何添加这些规则: ► 它可以包含 4 个一组的数字,并用一个连字符“-”分隔。 ► 不得有 4 个或更多连续重复数字。 这是我的
我正在尝试编写一个小测验,我希望“再试一次”按钮遵循与“else”之前的“if”语句相同的规则 using System; public class Program { public stat
在我的 Spring/Boot Java 项目中,我有一组服务方法,例如以下一个: @Override public Decision create(String name, String descr
我正在阅读 Covariant virtual function .上面写着 假设 B::f 覆盖了虚函数 A::f。如果满足以下所有条件,A::f 和 B::f 的返回类型可能不同: 1) The
我工作的公司想要分发(在公共(public)链接中)具有内部签名的应用程序。我很确定 Apple 否认这种事情,但我在官方文档/契约(Contract)中没有找到任何相关信息。 有谁知道它到底是如何工
我是 CSS 新手。我观察到一个奇怪的 CSS 行为,其中一个元素具有以下 CSS 属性 .container .header{ color: #FFFFFF; font-size: 2em;
这个问题在这里已经有了答案: Is there a CSS selector for elements containing certain text? (21 个答案) 关闭 7 年前。
我有以下 CSS: workoutcal.css: .errorlist{ color:red; } 以下基本模板: base.html: {% load static %} {
我是一名优秀的程序员,十分优秀!