复制子模块时不要复制父 pom



我想在执行package:copy目标时排除父pom(以下代码所在的位置),但我找不到示例或自己弄清楚:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.10</version>
    <executions>
        <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
                <goal>copy</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>${project.artifactId}</artifactId>
                        <version>${project.version}</version>
                        <type>${project.packaging}</type>
                        <classifier>shaded</classifier>
                        <destFileName>${project.name}.${project.packaging}</destFileName>
                        <excludes>*.pom</excludes> <!-- not working -->
                    </artifactItem>
                </artifactItems>
                <outputDirectory>${rootdir}/target/modules</outputDirectory>
                <silent>true</silent>
                <overWriteReleases>true</overWriteReleases>
                <overWriteSnapshots>true</overWriteSnapshots>
            </configuration>
        </execution>
    </executions>
</plugin>

无论artifactItem内部的<excludes>设置如何,它仍然包括我的父项目NiftyParent.pom。我想从复制到${rootdir}/target/modules目录中排除该文件。

如果有人问,${rootdir}属性只指向父项目目录,而不硬编码相对/绝对路径(为了论证其~/Workspace/Nifty

您可以将插件的skip配置元素与父模块及其模块中定义的 Maven property一起使用,以便跳过执行。

在您的父 pom 中,您可以按如下方式对其进行配置:

<properties>
    <skip-dependency-copy>true</skip-dependency-copy>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.10</version>
            <executions>
                <execution>
                    <id>copy</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>${project.groupId}</groupId>
                                <artifactId>${project.artifactId}</artifactId>
                                <version>${project.version}</version>
                                <type>${project.packaging}</type>
                                <classifier>shaded</classifier>
                                <destFileName>${project.name}.${project.packaging}</destFileName>
                            </artifactItem>
                        </artifactItems>
                        <outputDirectory>${rootdir}/target/modules</outputDirectory>
                        <silent>false</silent>
                        <overWriteReleases>true</overWriteReleases>
                        <overWriteSnapshots>true</overWriteSnapshots>
                        <skip>${skip-dependency-copy}</skip>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

请注意附加属性和skip元素配置。

然后,在每个模块中,您可以简单地配置以下内容:

<properties>
    <skip-dependency-copy>false</skip-dependency-copy>
</properties>

因此,我们实际上是根据父/模块位置打开/关闭它。这种方法的另一个优点是,您还可以跳过某些模块(如果需要),并能够从命令行(覆盖定义的属性值)打开/关闭所有模块(在您的情况下关闭)它

,例如:
mvn package -Dskip-dependency-copy=true

这种方法不使用插件配置,但在许多其他插件和情况下需要跳过时经常使用它。

相关内容

  • 没有找到相关文章

最新更新