我有一个checkstyle抑制过滤器的设置(例如忽略魔法号单元的测试码)。

《制止xml文件所在的同一个文件夹中的checkstyle xml文件。然而,在此文件实际上是变化:在我的窗户dev框它是在d:\dev\shared\checkstyle\config 在Linux CI服务器将/root/回购/shared/checkstyle/config 在另一个开发商框它可能在任何地方(他们检查了他们的svn回购)。

唯一的"一致的"事情是,抑制文件总是在同一文件夹中的checkstyle xml文件。我无法工作,如何确保这一文件是始终一贯地回升。我也不知道为什么checkstyle不支持嵌入的《制止在checkstyle xml文件。

任何帮助吗?

有帮助吗?

解决方案

当我来回Linux和Windows之间,我与Checkstyle的抑制的配置同样的问题。下面是我如何解决它在我的基于Ant的构建系统:

基本上,我通过配置Checkstyle的性质与Ant构建脚本文件注射合适的,特定于平台的目录值到主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来自哪里?那么,它的的导出的从我建立的一个属性,请继续阅读。你需要指定与你提到的目录值,这样的值。

请注意,有关于在其中指定该目录的方式微微一不明显的问题。我说,file值是从构建属性衍生因为我观察到的主要的Checkstyle配置文件不能包含反斜杠,即Windows路径分隔符,在C:\foo\bar\baz模块的C:foobarbaz属性的值。例如,指定类似scm.dir导致的Checkstyle错误信息说pathconvert无法找到。我解决这个由checkstyle目录构建属性“转换”到“UNIX”格式与Ant的<=>任务:

<pathconvert targetos="unix" property="scm.dir.unix">
    <path location="${scm.dir}"/>
</pathconvert>

然后我所说的<=> Ant任务是这样的:

<checkstyle config="${scm.dir}/checkstyle_checks.xml"
            properties="${scm.dir}/checkstyle.properties">
    <!-- details elided -->
</checkstyle>

到<=>任务呼叫注入包含在<=>文件到主Checkstyle的配置的键/值对。

如果你愿意,你可以看到完整的脚本这里

希望这有助于

其他提示

在蚀我把其不需要我添加任何额外的属性的情况如下:

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

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

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

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

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

由于thisdir可变来自蚂蚁,它似乎并不需要路径分隔的转换。

如果您使用蚀工作,你有在相同的目录中的外部的CheckStyle配置抑制文件,可以设置一个抑制滤波器是这样的:

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

您还必须定义在CheckStyle的配置中的$ {config_dir}属性:

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

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

config_dir --->  ${config_loc}

我认为罗伯特的回答可以扩展到一个简单的解决方案的蚂蚁和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>

希望这有助于。

由于CheckStyle4.26.0你可以使用预定常在你的配置文件。

(https://github.com/jshiell/checkstyle-idea/issues/217) :

  • ${basedir}&${project_loc}-得到映当前的项目目录
  • ${workspace_loc}-得到映当前的蚀的工作区的目录
  • ${config_loc}&${samedir}-得到映射向该目录的配置文件的谎言中

如果你想分享的配置与家你需要"化名"的"蚀常数"在你的POM配置(在本报告所述部分)采用的"propertyExpansion"结构元件:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-checkstyle-plugin</artifactId>
   <version>3.0.0</version>
   <configuration>
      <configLocation>${project.basedir}/quality/checkstyle/dap_checkstyle_checks.xml</configLocation>
      <propertyExpansion>basedir=${project.basedir}</propertyExpansion>
   </configuration>
   <reportSets>
      <reportSet>
         <reports>
            <report>checkstyle</report>
         </reports>
      </reportSet>
   </reportSets>
</plugin>

在"propertyExpansion"的启发: https://github.com/checkstyle/checkstyle/blob/master/pom.xml#L582.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top