首页 > 解决方案 > 从多个配置文件组合后,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 处理的第一个配置文件中有一个任务(例如),那么第二个配置文件中的任何任务都将被忽略并且不是组合配置的一部分。请注意,我只是用作示例。我已经尝试过其他任务并看到相同的行为。

有什么想法吗?

标签: maven-3maven-antrun-plugin

解决方案


你可以做两件事:

  1. 在每次执行时使用 an <id>:没有它,您将获得默认值,这就是 maven 在合并它们时用来确定重复配置项的方法。
  2. 使用 combine.children 等等。我建议您不要这样做,但您可以在blog.sonatype.commaven.apache.org上阅读更多内容。

您也可以直接使用的力量ant,创建目标并使用条件有条件地调用它。


推荐阅读