【问题标题】:CheckStyle SuppressionFilter module file path for Eclipse and Maven compatibilityEclipse 和 Maven 兼容性的 CheckStyle SuppressionFilter 模块文件路径
【发布时间】:2018-06-22 17:55:35
【问题描述】:

情况

我有一个带有 CheckStyle 设置的项目,它使用 SuppressionFiltercheckstyle_suppressions.xml 文件设置为忽略文件。

<module name="SuppressionFilter">
    <property name="file" value="${config_loc}/checkstyle_suppressions.xml"/>
    <property name="optional" value="false"/>
</module>

包含此SuppressionFiltercheckstyle.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 -&gt; [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:无法初始化模块 SuppressionFilter - 无法找到:checkstyle_suppressions.xml !堆栈 0 com.puppycrawl.tools.checkstyle.api.CheckstyleException:无法初始化模块 SuppressionFilter - 无法找到:checkstyle_suppressions.xml 在 com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:460) 在 com.puppycrawl.tools.checkstyle.api.AutomaticBean.configure(AutomaticBean.java:198) 在 net.sf.eclipsecs.core.builder.CheckerFactory.createCheckerInternal(CheckerFactory.java:299) 在 net.sf.eclipsecs.core.builder.CheckerFactory.createChecker(CheckerFactory.java:133) 在 net.sf.eclipsecs.core.builder.Auditor.runAudit(Auditor.java:141) 在 net.sf.eclipsecs.core.builder.CheckstyleBuilder.handleBuildSelection(CheckstyleBuilder.java:306) 在 net.sf.eclipsecs.core.builder.CheckstyleBuilder.build(CheckstyleBuilder.java:172) 在 org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:735) 在 org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 在 org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) 在 org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246) 在 org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:301) 在 org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 在 org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:304) 在 org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:360) 在 org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:383) 在 org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:142) 在 org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:232) 在 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56) 引起:com.puppycrawl.tools.checkstyle.api.CheckstyleException:无法找到:checkstyle_suppressions.xml 在 com.puppycrawl.tools.checkstyle.utils.CommonUtils.getUriByFilename(CommonUtils.java:510) 在 com.puppycrawl.tools.checkstyle.filters.SuppressionsLoader.loadSuppressions(SuppressionsLoader.java:202) 在 com.puppycrawl.tools.checkstyle.filters.SuppressionFilter.finishLocalSetup(SuppressionFilter.java:100) 在 com.puppycrawl.tools.checkstyle.api.AutomaticBean.configure(AutomaticBean.java:194) 在 com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:455) ... 18 更多

解决尝试

我尝试在 maven pom 中的多个位置设置此 ${config_loc} 变量,但没有成功。

问题

如何设置我的 CheckStyle 配置以使其适用于 Maven 和 Java Eclipse?我正在寻找一个可分发的解决方案,这意味着克隆或分叉此项目的其他开发人员将不会遇到这个问题。

【问题讨论】:

    标签: java eclipse maven filepath checkstyle


    【解决方案1】:

    我已经设法通过将&lt;propertyExpansion&gt;config_loc=${basedir}&lt;/propertyExpansion&gt; 添加到项目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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-07
      • 2016-01-29
      • 2011-04-28
      • 2011-05-10
      • 2016-09-25
      • 2019-03-25
      • 1970-01-01
      相关资源
      最近更新 更多