从Ant代码导出Maven属性

时间:2010-06-17 23:06:03

标签: maven-2 ant

我在POM中嵌入了以下代码:

<plugin name="test">
  <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
      <executions>
        <execution>
          <phase>validate</phase>
            <configuration>
              <tasks>
                <pathconvert targetos="unix" property="project.build.directory.portable">
                  <path location="${project.build.directory}"/>
                </pathconvert>
              </tasks>
            </configuration>
          <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>

然后我从${project.build.directory.portable}操作中引用run project,但它会以null的形式返回。在Ant块中执行<echo>会显示正确的值。我做错了什么?

4 个答案:

答案 0 :(得分:11)

为了完整起见,mentioned feature已于2010年10月在maven-antrun-plugin中实施。

您要查找的配置参数是exportAntProperties

使用示例:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.7-SNAPSHOT</version>
    <executions>
        <execution>
            <phase>process-resources</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <exec outputproperty="svnversion"
                        executable="svnversion">
                        <arg value=".." />
                    </exec>
                </target>
                <exportAntProperties>true</exportAntProperties>
            </configuration>
        </execution>
    </executions>
</plugin>

作为旁注,在本文(2011-10-20)发布时,官方插件文档没有记录此选项。要获得插件的'versionXYZ'的帮助:

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-antrun-plugin:versionXYZ -Ddetail

答案 1 :(得分:3)

maven-antrun-plugin的1.7版本让我将一个属性从ant传递给maven(从mvn传递到ant)。一些示例代码,用于计算文件的md5校验和,然后将其存储到稍后由mvn访问的属性中:

<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
    <execution>
        <id>ant-md5</id>
        <phase>initialize</phase>
        <goals>
        <goal>run</goal>
        </goals>
    <configuration>

<target>
    <property name="compile_classpath" refid="maven.compile.classpath"/>
    <property name="outputDir" value="${project.build.outputDirectory}"/>
    <property name="sourceDir" value="${project.build.sourceDirectory}"/>
    <checksum  file="${sourceDir}/com/blah/db/blah.java" property="blah.md5db"/>
</target>
<exportAntProperties>true</exportAntProperties>
</configuration>
</execution>
</executions>

稍后可以在java文件中使用$ {blah.md5db}访问该属性。

答案 2 :(得分:0)

我不认为你可以从Ant设置一个属性,从Maven可见。你应该写一个Mojo。

答案 3 :(得分:0)

来自插件文档here

尝试添加maven前缀,这样就可以了 而是<path location="${maven.project.build.directory}"/>

如果这不起作用,您可能需要自己明确重新定义该属性:

<property name="maven.project.build.dir" value="${project.build.directory}"/>
<path location="${maven.project.build.directory}"/>