复制子模块时不要复制父pom
Don't copy parent pom when copying child modules
我想在执行 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>
无论 <excludes>
中的 artifactItem
设置如何,它仍然包含我的父项目 NiftyParent.pom
。我想排除文件复制到 ${rootdir}/target/modules
目录。
万一有人问,${rootdir}
属性 只是指向父项目目录,没有硬编码 relative/absolute 路径(为了争论它的 ~/Workspace/Nifty
.
您可以将 plugin 的 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>
因此,我们实际上是根据 parent/module 位置切换它 on/off。这种方法的另一个优点是,您还可以为某些模块跳过它(如果需要),并能够从命令行(覆盖定义的属性值)为所有模块(在您的情况下关闭)切换它 on/off例如:
mvn package -Dskip-dependency-copy=true
这种方法不使用插件配置,但在许多其他插件和案例中需要跳过时经常使用它。
我想在执行 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>
无论 <excludes>
中的 artifactItem
设置如何,它仍然包含我的父项目 NiftyParent.pom
。我想排除文件复制到 ${rootdir}/target/modules
目录。
万一有人问,${rootdir}
属性 只是指向父项目目录,没有硬编码 relative/absolute 路径(为了争论它的 ~/Workspace/Nifty
.
您可以将 plugin 的 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>
因此,我们实际上是根据 parent/module 位置切换它 on/off。这种方法的另一个优点是,您还可以为某些模块跳过它(如果需要),并能够从命令行(覆盖定义的属性值)为所有模块(在您的情况下关闭)切换它 on/off例如:
mvn package -Dskip-dependency-copy=true
这种方法不使用插件配置,但在许多其他插件和案例中需要跳过时经常使用它。