将变量传递给 ant

  • 本文关键字:ant 变量 ant
  • 更新时间 :
  • 英文 :


>如果我通过执行将变量传递给蚂蚁

ant -Dsomething=blah

如何在我的构建中引用它.xml?我尝试了@something@${something},但似乎都不起作用。

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

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

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

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

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

$ ant -Dfoo=BAR_BAR_FOO
test:
     [echo] The value of foo is BAR_BAR_FOO
BUILD SUCCESSFUL
 time: 0 seconds

看。一点也不特别。您可以像对待普通属性一样对待命令行上设置的属性。

这就是乐趣所在。请注意,这次我已经在我的build.xml中定义了属性foo

<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文件本身中设置的值。这样,您可以拥有可被命令行参数覆盖的默认值。

听起来你想做如下的事情:

<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包含在javac SRC 中。

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

${argsOne}

我有用,如果调用命令是

ant -DargsOne=cmd_line_argument

Ant 文档也这样说。这应该有效,尝试使用 ant -debug 运行并粘贴输出。

相关内容

  • 没有找到相关文章

最新更新