当我在 Linux 和 Windows 之间来回切换时,我在 Checkstyle 抑制配置中遇到了同样的问题。以下是我在基于 Ant 的构建系统中解决它的方法:
基本上,我通过使用 Ant 构建脚本配置 Checkstyle 属性文件,将适当的、特定于平台的目录值注入到主 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
从何而来?好吧,它来自我构建的一个属性,请继续阅读。您需要使用您提到的目录值指定这样的值。
请注意,关于您指定此目录的方式,有一个不太明显的问题。我说该scm.dir.unix
值是从构建属性派生的,因为我观察到主 Checkstyle 配置文件不能在模块的file
属性值中包含反斜杠,即 Windows 路径分隔符。SuppressionFilter
例如,指定类似C:\foo\bar\baz
的内容会导致 Checkstyle 错误消息说C:foobarbaz
找不到。我通过使用 Ant 的任务将scm.dir
目录构建属性“转换”为“unix”格式来解决这个问题:pathconvert
<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
注入到主 Checkstyle 配置中。
如果你喜欢,你可以在这里看到完整的脚本
希望这可以帮助