2012-05-07 120 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運行並粘貼輸出。