2010-05-20 28 views
2

我們需要測試一個java版本,並將語言設置爲不同的值。我可以手動(即通過export LANG=en_DK.UTF-8export LANG=en_DK)測試使用ant構建腳本運行的單元測試的行爲不同,但我需要從ant設置環境變量。我曾嘗試使用這些方法(與外殼$LANG設置爲en_DK.UTF-8)設置它:使用在它 Ant忽略嘗試覆蓋LANG環境變量

  • 使用build.properties文件與線LANG=en_DKant -DLANG=en_DK
  • :在命令行上使用-D

    1. 以下語句在build.xml文件中(抱歉格式化,否則無法顯示):

    <property environment="ANTENV"/> 
    <property name="ANTENV.LANG" value="en_DK"/> 
    

    使用任何的三種可能性,當與-debug,螞蟻報告運行:

    Override ignored for property "LANG" 
    

    我能做些什麼,從螞蟻內設置LANG環境變量?

  • 回答

    1

    ANT Properties are immutable

    <property name="ANTENV.LANG" value="en_DK"/> 
    

    可以通過螞蟻被解釋爲試圖在ANTENV存儲所有的環境變量時(與<property environment="ANTENV"/>)來覆蓋LANG值已經存在。

    因此,您需要存儲以將該值存儲在單獨的屬性中。

    <property name="MY.LANG" value="${env.LANG}" /> 
    
    +0

    但是我並不需要存儲這個值;我需要設置它,以便JVM在執行測試時可以使用值爲en_DK或en_DK.UTF-8作爲LANG。我承認,螞蟻的屬性是不可變的,我只是想幹涉內部的環境變量... – Steen 2010-05-20 12:08:53

    +0

    @Steen:「我只想幹涉螞蟻內部的環境變量」:這就是' property name =「MY.LANG」value =「$ {env.LANG}」/>'允許你這樣做:一旦被選中,你可以在其他任務中重新使用它。你不能做的是改變在Ant會話之外設置的東西(比如環境值) – VonC 2010-05-20 12:28:54

    +0

    好的,這可以作爲我的問題的答案。不是我真正想聽的那個,但那是我的問題。我已經嘗試在調用ant之前設置LANG環境的shell腳本中調用構建文件。我工作正常,但感覺像一個黑客;) – Steen 2010-05-20 18:22:13

    0

    假設你的「測試Java構建」是通過調用做<java>,您可以使用叉旗幟,並通過性能到新創建的進程。這裏有一個來自Ant documentation的例子:

    <java classname="test.Main" 
         fork="yes" > 
        <sysproperty key="DEBUG" value="true"/> 
        <arg value="-h"/> 
        <jvmarg value="-Xrunhprof:cpu=samples,file=log.txt,depth=3"/> 
        </java> 
    
    +0

    感謝您的建議。正如VonC的答案所指出的,我通過一個shell腳本封裝達到了我的目的。你的解決方案達到了相同的效果,但它也(比如我的shell腳本包裝解決方案)感覺很難受。不過謝謝你的回答。 – Steen 2010-05-20 18:24:27