maven-3 - 从多个配置文件组合后,Maven antrun 插件缺少目标任务
问题描述
这是一个非常有趣的问题,我有 2 个配置文件,定义如下。我正在使用带有最新 Java 11 的 Maven 3.6.3。
<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>
当我激活 BOTH 配置文件时,我从 (-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 处理的第一个配置文件中有一个任务(例如),那么第二个配置文件中的任何任务都将被忽略并且不是组合配置的一部分。请注意,我只是用作示例。我已经尝试过其他任务并看到相同的行为。
有什么想法吗?
解决方案
你可以做两件事:
- 在每次执行时使用 an
<id>
:没有它,您将获得默认值,这就是 maven 在合并它们时用来确定重复配置项的方法。 - 使用 combine.children 等等。我建议您不要这样做,但您可以在blog.sonatype.com或maven.apache.org上阅读更多内容。
您也可以直接使用的力量ant
,创建目标并使用条件有条件地调用它。
推荐阅读
- python - 计算字典中项目的出现次数?
- python - 在数据流上运行 wordcount 时,获取匿名调用者没有 storage.objects.create 访问错误
- twitter-bootstrap - vue b-table 将一列改成链接
- php - php 从字符串中获取两个整数然后应用乘法运算
- delta - 禁用编译器优化以验证差异算法
- debugging - Blazor WASM:生产环境的详细错误
- python - Python:不仅根据值,还根据其他参与者的最小距离对选择单个最小距离对
- r - 受试者重复输入数据库的长格式数据。您如何在 R/dplyr 中为每个主题的每个事件创建唯一 ID?
- spring-boot - 与主键的一对一映射(有异常)
- javascript - 为什么我的机器人无法检测到角色中的人?