将变量传递给ant

时间:2012-05-07 22:02:09

标签: ant

如果我通过执行

将变量传递给ant
ant -Dsomething=blah

如何在build.xml中引用它?我尝试了 @something @ $ {something} ,但似乎都没有效果。

最终我要做的是在编译时设置一些属性(版本)。

更新:当然问题出在其他地方 - 通过示例接受最完整的答案

3 个答案:

答案 0 :(得分:5)

当你过度思考这些事情时,你不讨厌它吗?

<project name="test">
    <echo message="The value of foo is ${foo}"/>
</project>

现在,我将运行我的程序。请注意,我从未在foo中为属性build.xml定义值。相反,我将从命令行获取它:

$ ant -Dfoo=BAR_BAR_FOO

test:
     [echo] The value of foo is BAR_BAR_FOO

BUILD SUCCESSFUL
 time: 0 seconds

请参阅。没什么特别的。您可以像处理普通属性一样处理在命令行上设置的属性。

这就是有趣的地方。请注意,这次我在foo中定义了属性build.xml

<project name="test">
     <property name="foo" value="barfu"/>
     <echo message="The value of foo is ${foo}"/>
</project>

现在看一下这个有趣的事情:

$ ant
test:
     [echo] The value of foo is barfu

BUILD SUCCESSFUL
 time: 0 seconds

现在,我们将在命令行上设置属性foo

$ ant -Dfoo=BAR_BAR_FOO
test:
     [echo] The value of foo is BAR_BAR_FOO

BUILD SUCCESSFUL
 time: 0 seconds

请参阅命令行覆盖我在build.xml文件本身中设置的值。这样,您可以使用命令行参数覆盖的默认值。

答案 1 :(得分:1)

听起来你想做类似以下的事情:

<mkdir dir="build/src"/>
<copy todir="build/src" overwrite="true">
  <fileset dir="src" includes="**/*.java"/>
  <filterset>
    <filter token="VERSION" value="${version}"/>
  </filterset>
</copy>

...这将导致您的来源被复制,取代@VERSION@

public class a { public static final String VERSION = "@VERSION@"; }

...然后在build/src src中加入javac

尽管如此,我不推荐这种方法,因为源复制步骤很昂贵,而且无疑会引起混淆。过去,我使用version=x.y在我的包中存储了一个version.properties文件。在我的Java代码中,我使用了Class.getResourceAsStream("version.properties")java.util.Properties。在我的build.xml中,我使用了<property file="my/pkg/version.properties"/>,因此我可以创建output-${version}.jar

答案 2 :(得分:0)

${argsOne}适用于我,如果调用命令是

,则很容易引用

ant -DargsOne=cmd_line_argument

Ant documentation也这样说。这应该可行,尝试使用ant -debug运行并粘贴输出。