无法将 maven 属性 传递给 ant 运行 插件

Unable to pass maven property to ant run plugin

我在传递自定义 maven 属性(版本)时遇到问题 到 maven 使用 maven-antrun-plugin.

执行的脚本

我已经阅读了 Maven antrun: pass maven properties to ant 但这并没有解决问题。

我的问题与上述 SO 问题中给出的问题有一处不同。

在我的例子中,maven-antrun-plugin 作为父项目的子项目执行,其中 属性 被定义为所有模块的全局 属性。

maven-ant运行-plugin 是项目的一个模块。

父 pom 片段如下所示:

<project ...> 
  <!-- Parent -->
  <modelVersion>4.0.0</modelVersion>
  <groupId>xxx</groupId>
  <artifactId>xxx</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <properties>
     <my.project.version>0.0.3-SNAPSHOT</my.project.version>
     <maven.compiler.source>1.7</maven.compiler.source>
     <maven.compiler.target>1.7</maven.compiler.target>
     <java.version>1.7</java.version>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

ant 运行 pom 看起来像这样。 属性 被命名为 target.version

<project>
      <!-- Module -->
 <parent>
    <groupId>xxx</groupId>
    <artifactId>xxx</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent> 

 <build>
    <plugins>
         <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                  <execution>
                    <id>ant-magic</id>
                    <phase>prepare-package</phase>
                    <goals>
                      <goal>run</goal>
                    </goals>
                    <configuration>
                      <tasks>
                        <property name="compile_classpath" 
                                  refid="maven.compile.classpath"/>
                        <property name="outputDir"
                                  value="${project.build.outputDirectory}"/>
                        <property name="sourceDir"
                                  value="${project.build.sourceDirectory}"/>
                        <property name="compile_classpath" refid="maven.compile.classpath"/>

                        <property name="target-version" refid="${my.project.version}"/>
                        <echo message="Passed target version to ant build script: ${target-version}"/>      

                        <ant antfile="${basedir}/src/main/ant/create-dist.xml"
                             target="deploy-ea"/>
                      </tasks>
                    </configuration>
                  </execution>
                </executions>
              </plugin>
        </plugins>
</build>
</project>

在执行包含 ant运行-maven-plugin.

的子模块的构建过程中发生以下 maven 构建错误
`An Ant BuildException has occured: Reference 0.0.3-SNAPSHOT` not found

这很有趣,因为这是 maven 的价值 属性。

我还尝试使用简单的 属性 名称作为

的参数
refid attribute 

就我而言

<property name="target-version" refid="my.project.version"/>

这会导致以下错误:

   An Ant BuildException has occured: Reference my.project.version not found

ant脚本使用属性如下

<property name="myproject-jar" value="mymodulename-${target-version}.jar"/>

是我的配置有误还是 属性 是在父 pom.xml 中定义的问题?因此可能是 Maven 生命周期问题?

我为 property-标签使用了错误的属性名称 refid。将属性更改为 value 解决了问题。此外,我将 tasks 标记替换为 target,因为它被标记为已弃用。但这对给定的问题没有影响。

<project>
    ...
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>ant-magic</id>
                        <phase>prepare-package</phase> 
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <property name="compile_classpath" 
                                          refid="maven.compile.classpath"/>
                                <property name="outputDir"
                                          value="${project.build.outputDirectory}"/>
                                <property name="sourceDir"
                                          value="${project.build.sourceDirectory}"/>
                                <property name="compile_classpath" refid="maven.compile.classpath"/>

                                <property name="target-version" value="${my.project.version}"/> <!-- PROBLEM refid should be value-->
                                <echo message="Passed target version to ant build script: ${target-version}"/>      

                                <ant antfile="${basedir}/src/main/ant/create-dist.xml"
                                     target="deploy-ea"/>
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>