如何为checkstyle定义抑制定义,它们同时适用于ant和eclipse

时间:2009-03-31 13:41:10

标签: ant build-process continuous-integration eclipse-plugin checkstyle

我在项目checkstyle中使用,我在checkstyle-configuration中定义了SuppressionFilter。我使用Apache ant通过持续集成进行自动构建。

我的问题来自以下情况:我不想将大量文件填充到基于项目的文件中,因此checkstyle.xml和suppressions.xml都位于名为conf的子目录中(用于构建的配置) 。现在Ant和Eclipse在查找suppressions.xml方面的工作方式不同。

在我声明一个ant-task以找到checkstyle的基本配置的checkstyle.xml之后,Ant使用基于project-basedir作为basedir来查找suppressions.xml。此checkstyle.xml现在包含以下内容:

<module name="SuppressionFilter">
    <property name="file" value="conf/suppressions.xml"/>
</module>

这样ant-build会找到suppressions.xml,因为build的basedir是项目目录。

现在使用Eclipse的checkstyle-plugin会带来问题。它从checkstyle.xml具有的路径(conf)开始查找suppressions.xml。对于Eclipse,声明必须看起来像这样,工作:

<module name="SuppressionFilter">
    <property name="file" value="suppressions.xml"/>
</module>

编辑:即使这不起作用,Eclipse似乎总是需要一条绝对的路径。

我想知道一种方法,Eclipse和Ant都可以使用相同的checkstyle配置。有人知道这个问题的解决方案吗?绝对路径不是解决方案,因为每个开发人员和CI服务器都有不同的项目目录路径。

2 个答案:

答案 0 :(得分:10)

这个问题很老了,但我找到了一个更好的方法来使用Checkstyle Advanced properties

对于Eclipse Checkstyle插件,${samedir}属性会扩展到配置文件所在的目录:

在您的情况下,您的模块配置如下所示:

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

Ant目标也会设置samedir属性:

<checkstyle config="${checkstyle.tool.dir}/checks.xml" failOnViolation="false">
    <fileset dir="${src.dir}" includes="**/*.java" />
    <property key="samedir" value="${checkstyle.tool.dir}/conf" />
</checkstyle>

答案 1 :(得分:6)

使用Checkstyle的property expansion功能。在checkstyle.xml中将SupressionFilter声明为:

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

然后在Ant构建脚本中修改Checkstyle任务以包含嵌套属性:

<checkstyle config="conf/checkstyle.xml">
    <fileset dir="src" includes="**/*.java"/>
    <property key="checkstyle.suppressions.file" value="conf/suppressions.xml"/>
</checkstyle>