2008-10-13 75 views
5

我有一个checkstyle抑制过滤器设置(例如忽略单元测试代码中的幻数)。checkstyle +抑制过滤器

抑制xml文件与checkstyle xml文件位于同一文件夹中。但是,这个文件实际上是不同的:在我的Windows开发盒中它是在d:\ dev \ shared \ checkstyle \ config 上的,它将在/ root/repo/shared/checkstyle/config上的Linux CI服务器上 另一个开发人员可以将它放在任何地方(他们检查他们的svn回购)。

唯一“一致”的事情是压缩文件始终与checkstyle xml文件位于同一文件夹中。 我无法确定如何确保始终始终提取此文件。此外,我不知道为什么checkstyle不支持checkstyle xml文件中的嵌入式抑制。

有帮助吗?

回答

10

当我在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。这里是模板是什么样子的镇压文件属性:

[email protected][email protected]/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配置文件不能在SuppressionFilter模块的file属性的值中包含反斜线,即Windows路径分隔符。例如,指定类似C:\foo\bar\baz的内容会导致Checkstyle错误消息,说明找不到C:foobarbaz。我解决这个由scm.dir目录构建属性“转换”与Ant的pathconvert任务“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文件中包含的键/值对注入主Checkstyle配置中。

如果你喜欢,你可以看到完整的剧本here

希望这有助于

+0

感谢您的提示,我的ant版本现在很好,忽略了测试类中的神奇数字(这是一个开始!)。 我必须对您提供的代码进行一次更改(以供任何其他人稍后可能会参考),任务缺少“过滤=真”;至少在用我的蚂蚁版本运行时。 – 2008-10-14 10:02:08

2

我得到的绝对路径到build.xml驻留使用ant.file变量和项目名称的目录:

<project name="common" ... > 
    <dirname property="thisdir" file="${ant.file.common}"/> 

然后我可以串联的绝对路径我CheckStyle的配置文件:

checkstyle.suppressions.file=${thisdir}/qclib/checkstyle-suppressions.xml 

由于thisdir变量来自ant,它似乎不需要路径分隔符转换。

2

如果您正在使用Eclipse的工作,你必须在同一目录外的CheckStyle配置抑制文件,你可以设置一个抑制滤波器是这样的:

<module name="SuppressionFilter"> 
    <property name="file" value="${config_dir}/my_suppressions.xml"/> 
</module> 

你也必须定义$ { config_dir}财产在CheckStyle的配置:

Eclipse的首选项 - > “的Checkstyle” - >选择你的CS配置 - > “属性..” - > “其他属性..”

定义属性为的CheckStyle配置目录:

config_dir ---> ${config_loc} 
6

在Eclipse中,我把它并不需要我来添加任何附加属性如下:

<module name="SuppressionFilter"> 
    <property name="file" value="${samedir}/suppressions.xml"/> 
</module> 
1

我认为罗伯特的回答可以扩展到一个简单的解决方案蚂蚁和Eclipse

将抑制文件包含在您的配置XML中,如下所示:

<module name="SuppressionFilter"> 
    <property name="file" value="${samedir}/suppressions.xml"/> 
</module> 

现在,Eclipse很满意并找到该文件。

为了让蚂蚁内容更新您的目标是这样的:

<checkstyle config="${checkstyle.config}/checkstyle-checks.xml"> 
    <!-- ... --> 
    <property key="samedir" value="${checkstyle.config}"/> 
</checkstyle> 

希望这有助于。