我想在执行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
这种方法不使用插件配置,但在许多其他插件和情况下需要跳过时经常使用它。