我有一个父POM 这个checkstyle配置:
<properties>
<checkstyle.configLocation>src/checkstyle/checkstyle.xml</checkstyle.configLocation>
<checkstyle.suppressionsLocation>src/checkstyle/checkstyle-suppressions.xml</checkstyle.suppressionsLocation>
<maven-checkstyle-plugin.version>2.17</maven-checkstyle-plugin.version>
<properties>
<build>
<pluginManagement>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${maven-checkstyle-plugin.version}</version>
<configuration>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>validate</id>
<phase>validate</phase>
<configuration>
<configLocation>${checkstyle.configLocation}</configLocation>
<suppressionsLocation>${checkstyle.suppressionsLocation}</suppressionsLocation>
</configuration>
</execution>
</executions>
</plugin>
</pluginManagement>
</build>
这是继承的POM :
<build>
<plugins>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<configuration>
<configLocation>${project.parent.basedir}/${checkstyle.configLocation}</configLocation>
<suppressionsFile>${project.parent.basedir}/${checkstyle.suppressionsLocation}</suppressionsFile>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
我想只在继承的项目中执行checkstyle(因为我将有多个使用父pom的项目)。在父项目中,无需运行checkstyle,但我必须在父项目中使用 checkstyle.xml 和 checkstyle-suppressions.xml 配置文件,并使用继承的项目。
这是 mvn clean install 后获得的错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.17:check (validate) on project MyProject: Failed during checkstyle execution: Unable to find suppressions file at location: src/checkstyle/checkstyle-suppressions.xml: Could not find resource 'src/checkstyle/checkstyle-suppressions.xml'. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
子项目没有从父项目中找到checkstyle配置文件。
答案 0 :(得分:1)
来自文档
pluginManagement :是一个沿侧插件看到的元素。 插件管理包含大致相同的插件元素, 除了为此而不是配置插件信息 特定的项目构建,它旨在配置项目构建 继承自这一个。但是,这只配置插件 实际上是在子元素的plugins元素中引用的。 孩子们有权覆盖插件管理 定义
考虑到您的继承POM,使用的maven-checkstyle-plugin
将是您首先声明的(在pluginManagement之外)。对于继承的pom.xml
,要覆盖配置,您必须在plugins
而不是pluginManagement
下指定相同的内容。尝试将pom的构建标记简化为 -
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<!--Note - the version would be inherited-->
<configuration>
<configLocation>${project.parent.basedir}/${checkstyle.configLocation}</configLocation>
<suppressionsFile>${project.parent.basedir}/${checkstyle.suppressionsLocation}</suppressionsFile>
</configuration>
</plugin>
</plugins>
</build>
编辑: - 从评论中可以看出OP没有使用Simple Inheritance structure因此使用相对路径可以解决问题这种情况。
答案 1 :(得分:0)
如果您继承的项目位于其他存储库中,则需要另一种方法。只需将父项添加为插件中的依赖项即可。请注意,您不能在<reporting>
中使用此方法,因为它不支持插件依赖性。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<!--version is inherited-->
<dependencies>
<dependency>
<groupId>parent.group.id</groupId>
<artifactId>parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
有关更多信息,请参见 https://maven.apache.org/plugins/maven-checkstyle-plugin/examples/multi-module-config.html