Maven从父

时间:2017-03-14 14:48:34

标签: java maven inheritance maven-plugin checkstyle

我有一个父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配置文件。

2 个答案:

答案 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