在外部蚂蚁构建文件中看不到POM的“属性”部分中定义的属性。

时间:2018-11-06 15:29:54

标签: maven properties ant pom.xml build.xml

我在带有外部ant文件的pom.xml中使用了maven-antrun-plugin。 在插件的文档中有这样的说法:

  

Maven可用的所有属性在   目标配置。但是,您可能想调用外部Ant   使用ant任务构建脚本。为避免名称冲突,只有一个   属性的子集传递到外部Ant构建。 这些   包括在POM的“属性”部分中定义的所有属性。   它还包括一些常用Maven的前缀版本   属性。

这是我的pom,我在其中定义“ test.prop”属性:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>testant</groupId>
    <artifactId>testant</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <test.prop>TestPropValue</test.prop>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>ant</groupId>
                        <artifactId>optional</artifactId>
                        <version>1.5.4</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>generate-index-properties</id>
                        <phase>install</phase>
                        <configuration>
                            <tasks>
                                <!--<property name="test.prop" value="${test.prop}"/>-->
                                <ant antfile="build.xml">
                                    <target name="echo-prop"/>
                                </ant>
                            </tasks>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

并尝试在build.xml中回显此属性:

<project default="test">
    <target name="echo-prop">
        <echo>${test.prop}</echo>
    </target>
</project>

这就是我得到的:

echo-prop:
     [echo] ${test.prop}

因此,根据文档,属性未得到应有的解决。 而且只有在我取消注释“ tasks”标签下的显式属性声明的行的情况下,它才能正常工作。 您能帮助我理解我在做什么错吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您应为antrun-plugin指定一个版本:

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-antrun-plugin</artifactId>
     <version>1.8</version><!--$NO-MVN-MAN-VER$-->
     (...)
</plugin>

默认情况下,

ant将父级的所有属性传递给基础的“ ant”调用。除非您定义InheritAll = false,否则将传递所有属性。

在这种情况下,您应该看看有效的pom。定义了一个非常古老的antrun-plugin版本。 切换到最新版本后,示例代码就会起作用。