用于 Eclipse 和 Maven 兼容性的 CheckStyle SuppressionFilter 模块文件路径
CheckStyle SuppressionFilter module file path for Eclipse and Maven compatibility
情况
我有一个带有 CheckStyle 设置的项目,它使用 SuppressionFilter
将 checkstyle_suppressions.xml
文件设置为忽略文件。
<module name="SuppressionFilter">
<property name="file" value="${config_loc}/checkstyle_suppressions.xml"/>
<property name="optional" value="false"/>
</module>
包含此 SuppressionFilter
的 checkstyle.xml
文件引用自项目 pom.xml
文件:
<!-- Checkstyle plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>checkstyle</id>
<phase>test</phase>
<configuration>
<sourceDirectories>${project.compileSourceRoots}</sourceDirectories>
<testSourceDirectories>${project.testCompileSourceRoots}</testSourceDirectories>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<configLocation>${basedir}/checkstyle.xml</configLocation>
<encoding>UTF-8</encoding>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<linkXRef>false</linkXRef>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>8.9</version>
</dependency>
</dependencies>
</plugin>
问题
使用 Java Eclipse 执行 CheckStyle 检查时,一切都按预期运行。但是,当使用 maven 构建时,由于 ${config_loc}
属性 未设置,构建失败。原始错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.0.0:check (checkstyle) on project MyProject: Failed during checkstyle execution: Failed during checkstyle configuration: unable to parse configuration stream: Property ${config_loc} has not been set -> [Help 1]
在上面的配置中将 ${config_loc}/checkstyle_suppressions.xml
更改为 checkstyle_suppressions.xml
时,maven 会按预期构建应用程序,但是 Java Eclipse 的 CheckStyle 插件无法再解析文件,打印日志出现以下异常:
!ENTRY net.sf.eclipsecs.core 4 0 2018-06-07 05:40:02.460
!MESSAGE Checkstyle-Plugin: cannot initialize module SuppressionFilter - Unable to find: checkstyle_suppressions.xml
!STACK 0
com.puppycrawl.tools.checkstyle.api.CheckstyleException: cannot initialize module SuppressionFilter - Unable to find: checkstyle_suppressions.xml
at com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:460)
at com.puppycrawl.tools.checkstyle.api.AutomaticBean.configure(AutomaticBean.java:198)
at net.sf.eclipsecs.core.builder.CheckerFactory.createCheckerInternal(CheckerFactory.java:299)
at net.sf.eclipsecs.core.builder.CheckerFactory.createChecker(CheckerFactory.java:133)
at net.sf.eclipsecs.core.builder.Auditor.runAudit(Auditor.java:141)
at net.sf.eclipsecs.core.builder.CheckstyleBuilder.handleBuildSelection(CheckstyleBuilder.java:306)
at net.sf.eclipsecs.core.builder.CheckstyleBuilder.build(CheckstyleBuilder.java:172)
at org.eclipse.core.internal.events.BuildManager.run(BuildManager.java:735)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
at org.eclipse.core.internal.events.BuildManager.run(BuildManager.java:301)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:304)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:360)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:383)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:142)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:232)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: Unable to find: checkstyle_suppressions.xml
at com.puppycrawl.tools.checkstyle.utils.CommonUtils.getUriByFilename(CommonUtils.java:510)
at com.puppycrawl.tools.checkstyle.filters.SuppressionsLoader.loadSuppressions(SuppressionsLoader.java:202)
at com.puppycrawl.tools.checkstyle.filters.SuppressionFilter.finishLocalSetup(SuppressionFilter.java:100)
at com.puppycrawl.tools.checkstyle.api.AutomaticBean.configure(AutomaticBean.java:194)
at com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:455)
... 18 more
解决尝试
我曾尝试在多个地方的 maven pom 中设置此 ${config_loc}
变量,但没有成功。
问题
如何设置我的 CheckStyle 配置,使其适用于 Maven 和 Java Eclipse?我正在寻找一个可分发的解决方案,这意味着克隆或分叉该项目的其他开发人员将不会遇到这个问题。
我已经通过将 <propertyExpansion>config_loc=${basedir}</propertyExpansion>
添加到项目 pom.xml
文件来解决这个问题。对于有类似问题的任何人,CheckStyle maven 插件设置现在是:
<!-- Checkstyle plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>checkstyle</id>
<phase>test</phase>
<configuration>
<sourceDirectories>${project.compileSourceRoots}</sourceDirectories>
<testSourceDirectories>${project.testCompileSourceRoots}</testSourceDirectories>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<configLocation>${basedir}/checkstyle.xml</configLocation>
<propertyExpansion>config_loc=${basedir}</propertyExpansion>
<encoding>UTF-8</encoding>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<linkXRef>false</linkXRef>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>8.9</version>
</dependency>
</dependencies>
</plugin>
情况
我有一个带有 CheckStyle 设置的项目,它使用 SuppressionFilter
将 checkstyle_suppressions.xml
文件设置为忽略文件。
<module name="SuppressionFilter">
<property name="file" value="${config_loc}/checkstyle_suppressions.xml"/>
<property name="optional" value="false"/>
</module>
包含此 SuppressionFilter
的 checkstyle.xml
文件引用自项目 pom.xml
文件:
<!-- Checkstyle plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>checkstyle</id>
<phase>test</phase>
<configuration>
<sourceDirectories>${project.compileSourceRoots}</sourceDirectories>
<testSourceDirectories>${project.testCompileSourceRoots}</testSourceDirectories>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<configLocation>${basedir}/checkstyle.xml</configLocation>
<encoding>UTF-8</encoding>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<linkXRef>false</linkXRef>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>8.9</version>
</dependency>
</dependencies>
</plugin>
问题
使用 Java Eclipse 执行 CheckStyle 检查时,一切都按预期运行。但是,当使用 maven 构建时,由于 ${config_loc}
属性 未设置,构建失败。原始错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.0.0:check (checkstyle) on project MyProject: Failed during checkstyle execution: Failed during checkstyle configuration: unable to parse configuration stream: Property ${config_loc} has not been set -> [Help 1]
在上面的配置中将 ${config_loc}/checkstyle_suppressions.xml
更改为 checkstyle_suppressions.xml
时,maven 会按预期构建应用程序,但是 Java Eclipse 的 CheckStyle 插件无法再解析文件,打印日志出现以下异常:
!ENTRY net.sf.eclipsecs.core 4 0 2018-06-07 05:40:02.460 !MESSAGE Checkstyle-Plugin: cannot initialize module SuppressionFilter - Unable to find: checkstyle_suppressions.xml !STACK 0 com.puppycrawl.tools.checkstyle.api.CheckstyleException: cannot initialize module SuppressionFilter - Unable to find: checkstyle_suppressions.xml at com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:460) at com.puppycrawl.tools.checkstyle.api.AutomaticBean.configure(AutomaticBean.java:198) at net.sf.eclipsecs.core.builder.CheckerFactory.createCheckerInternal(CheckerFactory.java:299) at net.sf.eclipsecs.core.builder.CheckerFactory.createChecker(CheckerFactory.java:133) at net.sf.eclipsecs.core.builder.Auditor.runAudit(Auditor.java:141) at net.sf.eclipsecs.core.builder.CheckstyleBuilder.handleBuildSelection(CheckstyleBuilder.java:306) at net.sf.eclipsecs.core.builder.CheckstyleBuilder.build(CheckstyleBuilder.java:172) at org.eclipse.core.internal.events.BuildManager.run(BuildManager.java:735) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246) at org.eclipse.core.internal.events.BuildManager.run(BuildManager.java:301) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:304) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:360) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:383) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:142) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:232) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56) Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: Unable to find: checkstyle_suppressions.xml at com.puppycrawl.tools.checkstyle.utils.CommonUtils.getUriByFilename(CommonUtils.java:510) at com.puppycrawl.tools.checkstyle.filters.SuppressionsLoader.loadSuppressions(SuppressionsLoader.java:202) at com.puppycrawl.tools.checkstyle.filters.SuppressionFilter.finishLocalSetup(SuppressionFilter.java:100) at com.puppycrawl.tools.checkstyle.api.AutomaticBean.configure(AutomaticBean.java:194) at com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:455) ... 18 more
解决尝试
我曾尝试在多个地方的 maven pom 中设置此 ${config_loc}
变量,但没有成功。
问题
如何设置我的 CheckStyle 配置,使其适用于 Maven 和 Java Eclipse?我正在寻找一个可分发的解决方案,这意味着克隆或分叉该项目的其他开发人员将不会遇到这个问题。
我已经通过将 <propertyExpansion>config_loc=${basedir}</propertyExpansion>
添加到项目 pom.xml
文件来解决这个问题。对于有类似问题的任何人,CheckStyle maven 插件设置现在是:
<!-- Checkstyle plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>checkstyle</id>
<phase>test</phase>
<configuration>
<sourceDirectories>${project.compileSourceRoots}</sourceDirectories>
<testSourceDirectories>${project.testCompileSourceRoots}</testSourceDirectories>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<configLocation>${basedir}/checkstyle.xml</configLocation>
<propertyExpansion>config_loc=${basedir}</propertyExpansion>
<encoding>UTF-8</encoding>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<linkXRef>false</linkXRef>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>8.9</version>
</dependency>
</dependencies>
</plugin>