checkstyle+抑制过滤器
-
10-07-2019 - |
题
我有一个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.