- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 checkstyle 抑制过滤器设置(例如,忽略单元测试代码中的魔数(Magic Number))。
抑制 xml 文件与 checkstyle xml 文件位于同一文件夹中。但是,此文件实际所在的位置各不相同:在我的 Windows 开发箱中,它位于 d:\dev\shared\checkstyle\config在 Linux CI 服务器上,它将位于/root/repo/shared/checkstyle/config在另一个开发者盒子上,它可以在任何地方(他们检查他们的 svn 仓库)。
唯一“一致”的是抑制文件始终与 checkstyle xml 文件位于同一文件夹中。我无法弄清楚如何确保始终始终如一地提取此文件。另外我不知道为什么 checkstyle 不支持在 checkstyle xml 文件中嵌入抑制。
有什么帮助吗?
最佳答案
当我在 Linux 和 Windows 之间来回切换时,我在 Checkstyle 抑制配置方面遇到了同样的问题。以下是我在基于 Ant 的构建系统中解决它的方法:
基本上,我通过使用 Ant 构建脚本配置 Checkstyle 属性文件,将适当的、特定于平台的目录值注入(inject)到主 Checkstyle 配置文件中。
我的主要 Checkstyle 配置文件有一个 SuppressionFilter
模块声明,如下所示。 checkstyle-suppressions-file
属性的值来自 Checkstyle 属性文件:
<module name="SuppressionFilter">
<property name="file" value="${checkstyle-suppressions-file}"/>
</module>
Checkstyle 属性文件不是静态的,它是由 Ant 构建脚本从名为 template-checkstyle.properties
的属性文件模板生成的。以下是抑制文件属性的模板:
checkstyle-suppressions-file=@SCM_DIR@/checkstyle_suppressions.xml
我的 Ant 构建脚本将此文件复制到名为 checkstyle.properties
的文件中。该副本将特殊标记替换为抑制文件所在目录的正确值:
<copy file="${scm.dir}/template-checkstyle.properties" tofile="${scm.dir}/checkstyle.properties">
<filterset>
<filter token="SCM_DIR" value="${scm.dir.unix}"/>
</filterset>
</copy>
现在,scm.dir.unix
的值从何而来?好吧,它是 派生 来 self 构建的一个属性,请继续阅读。您需要使用您提到的目录值指定这样的值。
请注意,关于您指定此目录的方式,有一个不太明显的问题。我说 scm.dir.unix
值是从构建属性派生的,因为我观察到主 Checkstyle 配置文件不能在 的值中包含反斜杠,即 Windows 路径分隔符
属性。例如,指定类似 SuppressionFilter
模块的 fileC:\foo\bar\baz
的内容会导致 Checkstyle 错误消息指出无法找到 C:foobarbaz
。我通过使用 Ant 的 pathconvert
任务将 scm.dir
目录构建属性“转换”为“unix”格式来解决此问题:
<pathconvert targetos="unix" property="scm.dir.unix">
<path location="${scm.dir}"/>
</pathconvert>
然后我这样调用 checkstyle
Ant 任务:
<checkstyle config="${scm.dir}/checkstyle_checks.xml"
properties="${scm.dir}/checkstyle.properties">
<!-- details elided -->
</checkstyle>
调用 checkstyle
任务会将 checkstyle.properties
文件中包含的键/值对注入(inject)主 Checkstyle 配置。
如果你愿意,你可以看到完整的脚本here
希望对你有帮助
关于java - checkstyle + 抑制过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/198244/
发现一个类似的问题,关于 QAPlug-FindBugs 和 FindBugs-IDEA 之间的区别,但不是关于 CheckStyle... 我认为(根据以前的经验)这些插件的一个区别是 QAPlug
试图弄清楚我是否做错了什么,或者这是否是 maven checkstyle 插件中的错误。如果我执行 mvn checkstyle:check 我会得到这个: jonathanfisher@odin
我想确保我的代码不超过 5 级缩进,如下所示: class Foo { // 0 void bar() { // 1 if () { // 2 if (
FileTabCharacter检查似乎对我不起作用。下面是我的配置: .. .. .. .. .. .. 我有 XML 文件 - pom.xml和 checksty
有没有办法设置 checkstyle 来防止方法体中的前导、多个或尾随空行: 例如 private void a() { - int a = 1; doStuff(a); - - doMoreStuf
有没有办法设置 checkstyle 来防止方法体中的前导、多个或尾随空行: 例如 private void a() { - int a = 1; doStuff(a); - - doMoreStuf
我是 CheckStyle 等 Java 静态代码分析工具的新手。我下载了 Checkstyle 包并看到了 2 组检查: checkstyle_checks.xml sun_checks.xml。
我想使用//@checkstyle:off 和//@checkstyle:on 来免除代码的某些部分被 checkstyle 检查,但它仍然在提示。 public void invoke() {
我正在尝试将 import-control 添加到我们的 checkstyle 中,使 import-control 文件存在于制作 checstyle.xml 文件的项目中,而不是我们稍后构建的项目
我跑了mvn checkstyle:checkstyle ,但它没有使用我的自定义 checkstyle XML 文件。 请告诉我如何使用我自己的 checkstyle 文件而不是默认/现在配置的文件
执行命令mvn checkstyle:checkstyle时出现以下错误: An error has occurred in Checkstyle report generation. ... Cau
在我正在处理的一个项目中,我们有很多自定义 Checkstyle 检查。例如,我们使用 RegexpSingleline 模块排除所有类型的东西。我们的检查样式规则如下所示:
我正在使用 checkstyle获取有关我的源代码的报告。这个问题是关于MagicNumberCheck . 我正在使用 Date/(org.joda.)DateTime在我的源代码中是这样的: Da
我通过命令行上的 mvn 构建我的项目。 每当发生 checkStyle 错误时,我都会看到这种类型的输出: [ERROR] Failed to execute goal org.apache.mav
我有一个使用 Tycho 构建的 Eclipse 插件代码库。它使用在依赖 Artifact 中定义的父 POM,该 Artifact 指定 Checkstyle 配置的名称。 我还使用 checks
我是使用 Jenkins 的新手,我最近用它构建了一个项目并安装了“Checkstyle”插件并收到了一份报告。 我想知道如何配置“Checkstyle”以忽略空格或其他可能出现的标准? 谢谢! 最佳
我过去使用过检查样式,记得使用快捷键来应用检查样式修复(节省大量点击)。我不记得我是否为它设置了快捷方式,或者它是否已经附带了一个。 我的问题分为两部分:1)有没有一种简单的方法来检查是否有“Appl
我正在使用一个基本的 maven 项目,其中在 pom.xml 中只定义了以下内容: 依赖 javaee-api 依赖 junit 插件 maven-compile-plugin 插件 maven-w
我试图让 maven-checkstyle-plugin 对我们所有的项目使用相同的配置文件。 我尝试了几种方法,但没有一种是有效的。 唯一似乎有效的是当我将配置文件放在我的 maven 项目的根目录
我在 maven 构建中添加了 checkstyle 但由于某种原因它只检查 src/main 文件夹并忽略 src/test 文件夹,这是我的项目结构: Proj - Module A -
我是一名优秀的程序员,十分优秀!