8

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

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

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

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

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

现在使用 Eclipse 的checkstyle-plugin会带来一个问题。它从 checkstyle.xml 的路径 (conf) 开始查找 suppresss.xml。对于 Eclipse,声明必须如下所示才能起作用:

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

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

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

4

2 回答 2

10

这个问题已经很老了,但我找到了使用Checkstyle Advanced 属性的更好方法:

对于 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>
于 2011-10-03T19:30:37.593 回答
8

使用 Checkstyle 的属性扩展功能。在您的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>
于 2009-04-06T13:03:47.530 回答