2012-05-07 57 views
2

如果我通过一个变量做传递变量到蚂蚁

ant -Dsomething=blah 

我怎么可以参考它在我的build.xml蚂蚁?我尝试了@ something @$ {something}但似乎都不起作用。

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

更新:当然,问题竟然是别的地方 - 接受与实例

+2

$ {something}应该可以正常工作。你可以发布你指向变量的Ant构建文件部分,以及在你的构建文件中放入“的结果吗? –

回答

4

难道你不恨它,当你在想这些事情:

<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 

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

这里是其中的乐趣进来注意,我这阵子中定义的属性foobuild.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

这听起来像你想要做类似下面的最完整的寻找答案:

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

...这将导致您的源被复制,替换@[email protected]

public class a { public static final String VERSION = "@[email protected]"; } 

..然后在您的javac src中包含build/src

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

0

${argsOne}作品对我来说,如果调用命令

ant -DargsOne=cmd_line_argument

Ant documentation也这么说很容易引用。这应该工作,尝试使用ant -debug运行并粘贴输出。