2012-10-11 21 views
2

任何人都可以幫助我如何在構建應用程序時替換jnlp中的字符串。這是我遵循的步驟。在使用ant build生成戰爭時替換jnlp中的字符串

  1. 創建一個字符串內容JNLP文件像

    <jnlp spec="1.0+" codebase="%$%test.url$" href="test.jnlp"> 
    
  2. ,我們的應用是環境相關的,同時產生戰爭,我會通過一個命令行參數Ant構建。所以基於這個命令行參數,我們在屬性文件中維護了一個不同的URL。
  3. 在構建應用程序時,我無法替換jnlp中依賴於環境的URL。

任何人都可以對此提出建議嗎?

回答

1

要將一個參數傳遞給ant來選擇環境,您可以使用例如ant -Denv=prodant -Denv=test來啓動ant,並根據env屬性在ant build.xml中做出決定。

您可以設置基於像這樣的選擇環境中的其它特性:

<target name="compile" depends="init" description="compile the source"> 
    <!-- settings for production environment --> 
    <condition property="scalacparams" 
      value="-optimise -Yinline -Ydead-code -Ywarn-dead-code -g:none -Xdisable-assertions"> 
    <equals arg1="${env}" arg2="prod"/> 
    </condition> 
    <condition property="javacparams" value="-g:none -Xlint"> 
    <equals arg1="${env}" arg2="prod"/> 
    </condition> 

    <!-- settings for test environment --> 
    <condition property="scalacparams" value="-g:vars"> 
    <equals arg1="${env}" arg2="test"/> 
    </condition> 
    <condition property="javacparams" value="-g -Xlint"> 
    <equals arg1="${env}" arg2="test"/> 
    </condition> 

    <!-- abort if no environment chosen --> 
    <fail message="Use -Denv=prod or -Denv=test"> 
    <condition> 
     <not> 
     <isset property="scalacparams"/> 
     </not> 
    </condition> 
    </fail> 

    <!-- actual compilation done here -> 
</target> 

你也可以使用<if>只爲一個特定的環境中執行某些操作:

<if> <!-- proguard only for production release --> 
    <equals arg1="${env}" arg2="prod" /> 
    <then> 
     <!-- run proguard here --> 
    </then> 
    </if> 

最後,將根據環境將字符串放入文件中,首先在檢查選擇了哪個環境後(如上所述)設置屬性,然後:

<copy file="template.jnlp" tofile="appname.jnlp"> 
    <filterset begintoken="$" endtoken="$"> 
    <filter token="compiledwith" value="${scalacparams}"/> 
    <!--- more filter rules here --> 
    </filterset> 
</copy> 

這就是假設template.jnlp是佔位符被$包圍的文件。在示例中,$ compiledwith $ in template.jnlp將被替換爲先前設置的scala編譯器參數,並將結果寫入appname.jnlp。

相關問題