我在带有外部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”标签下的显式属性声明的行的情况下,它才能正常工作。 您能帮助我理解我在做什么错吗?
谢谢!
答案 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版本。 切换到最新版本后,示例代码就会起作用。