从多个配置文件合并后,Maven antrun 插件缺少目标任务
Maven antrun plugin missing target task after combining from multiple profiles
这是一个非常有趣的问题,我有 2 个配置文件,定义如下。我使用 Maven 3.6.3 和最新的 Java 11.
<profiles>
<profile>
<id>assembly-unzip</id>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<unzip src="src1.zip" dest="dest10" />
<copy file="copy1.txt" todir="dest11"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>assembly-get</id>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<mkdir dir="download" />
<get src="src20" dest="dest"/>
<unzip src="dest/src20}" dest="dest"/>
<get src="src21" dest="dest"/>
<unzip src="dest/src21}" dest="dest"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
当我激活两个配置文件时,我从 (-X) 得知 Maven 将 2 个 antrun 插件配置组合成一个配置,如下所示:
<configuration>
<exportAntProperties default-value="false"/>
<failOnError default-value="true"/>
<localRepository>${localRepository}</localRepository>
<mavenProject default-value="${project}"/>
<pluginArtifacts>${plugin.artifacts}</pluginArtifacts>
<session default-value="${session}"/>
<skip default-value="false">${maven.antrun.skip}</skip>
<sourceRoot>${sourceRoot}</sourceRoot>
<target>
<mkdir dir="download"/>
<get src="src20" dest="dest"/>
<unzip src="dest/src20}" dest="dest"/>
<get src="src21" dest="dest"/>
<unzip src="dest/src21}" dest="dest"/>
<copy file="copy1.txt" todir="dest11"/>
</target>
<testSourceRoot>${testSourceRoot}</testSourceRoot>
<versionsPropertyName default-value="maven.project.dependencies.versions"/>
</configuration>
组合配置中缺少的是:
<unzip src="src1.zip" dest="dest10" />
我已经以不同的方式尝试了多次,总而言之,如果 Maven 处理的第一个配置文件有一个任务(例如),那么第二个配置文件将被忽略并且不属于组合配置的一部分。请注意,我只是举个例子。我在其他任务中尝试过它并看到了相同的行为。
有什么想法吗?
你可以做两件事:
- 对你的每个执行使用一个
<id>
:没有它,你会得到默认值,这就是maven在合并它们时用来确定重复配置项的方法。
- 使用combine.children等。我建议你不要那样做,但你可以在 blog.sonatype.com or at maven.apache.org.
上阅读更多内容
您也可以直接使用 ant
的强大功能,创建目标并使用 condition.
有条件地调用它
这是一个非常有趣的问题,我有 2 个配置文件,定义如下。我使用 Maven 3.6.3 和最新的 Java 11.
<profiles>
<profile>
<id>assembly-unzip</id>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<unzip src="src1.zip" dest="dest10" />
<copy file="copy1.txt" todir="dest11"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>assembly-get</id>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<mkdir dir="download" />
<get src="src20" dest="dest"/>
<unzip src="dest/src20}" dest="dest"/>
<get src="src21" dest="dest"/>
<unzip src="dest/src21}" dest="dest"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
当我激活两个配置文件时,我从 (-X) 得知 Maven 将 2 个 antrun 插件配置组合成一个配置,如下所示:
<configuration>
<exportAntProperties default-value="false"/>
<failOnError default-value="true"/>
<localRepository>${localRepository}</localRepository>
<mavenProject default-value="${project}"/>
<pluginArtifacts>${plugin.artifacts}</pluginArtifacts>
<session default-value="${session}"/>
<skip default-value="false">${maven.antrun.skip}</skip>
<sourceRoot>${sourceRoot}</sourceRoot>
<target>
<mkdir dir="download"/>
<get src="src20" dest="dest"/>
<unzip src="dest/src20}" dest="dest"/>
<get src="src21" dest="dest"/>
<unzip src="dest/src21}" dest="dest"/>
<copy file="copy1.txt" todir="dest11"/>
</target>
<testSourceRoot>${testSourceRoot}</testSourceRoot>
<versionsPropertyName default-value="maven.project.dependencies.versions"/>
</configuration>
组合配置中缺少的是:
<unzip src="src1.zip" dest="dest10" />
我已经以不同的方式尝试了多次,总而言之,如果 Maven 处理的第一个配置文件有一个任务(例如),那么第二个配置文件将被忽略并且不属于组合配置的一部分。请注意,我只是举个例子。我在其他任务中尝试过它并看到了相同的行为。
有什么想法吗?
你可以做两件事:
- 对你的每个执行使用一个
<id>
:没有它,你会得到默认值,这就是maven在合并它们时用来确定重复配置项的方法。 - 使用combine.children等。我建议你不要那样做,但你可以在 blog.sonatype.com or at maven.apache.org. 上阅读更多内容
您也可以直接使用 ant
的强大功能,创建目标并使用 condition.