2011-03-03 24 views
-2

我將程序包部署到單獨的Jar(每個Jar包含一個包)。這導致Jars範圍內Zip壓縮效率較低,但由於惰性下載和增量更新,使用Java Web Start啓動效率更高。將目錄映射到Ant中的名稱

構建工具是Ant。目前,我有一個單獨的任務調用每個類文件的目錄。這導致了很多jar任務和一個長的構建文件。我想通過將清單詳細信息移動到每個目錄/包中的單獨文件中,並使用foreach(或類似的)任務來使用清單對Jar進行Jar打包,使用包結構的'tail'作爲急劇縮短罐子的名字。

E.G. org/pscode/ui/widget/包應映射到ui.widget.jar(不需要org.pscode.前綴)。

我最煩惱的事情是創建文件名。


解決

<target name="start" depends="properties"> 
    <foreach target="printOut" param="package"> 
     <path> 
      <dirset dir="${src}/java/org/pscode" includes="**/*" /> 
     </path> 
    </foreach> 
</target> 

<target name="printOut"> 
    <pathconvert property="prop" dirsep="."> 
     <path location="${package}"/> 
    </pathconvert> 
    <script language="javascript"> 
     <![CDATA[ 
      prop1 = projectName.getProperty("prop"); 
      index = prop1.lastIndexOf("pscode"); 
      prop2 = prop1.substring(index+7, prop.length); 
      projectName.setProperty("prop2", prop2); 
     ]]> 
    </script> 
    <echo message="Package jar name: ${prop2}.jar"/> 
</target> 

這沿着線產生輸出..

Buildfile: build.xml 

properties: 
[pathconvert] org 
[pathconvert] pscode 
[pathconvert] starzoom 
[pathconvert] ui 
.. 
[pathconvert] serialize 

start: 

printOut: 
    [echo] Package jar name: starzoom.jar 

printOut: 
    [echo] Package jar name: ui.jar 
... 
printOut: 
    [echo] Package jar name: xui.security.serialize.jar 

BUILD SUCCESSFUL 
Total time: 0 seconds 

Tool completed successfully 

JavaScript代碼段是在螺紋ant string manipulation : extracting characters from a string上靈感來自發布者pdeva 。

回答

3

請參閱下面的略微調整版本, 希望能夠滿足您的需求。

注意,默認情況下螞蟻的contrib foreach不 傳播特性的所謂目標,所以你需要嵌套一個額外param 傳遞src值。該值是爲了剝離路徑的主要部分 。

我已經添加了示例屬性目標 來說明您可能還包括 路徑中的jar命名方案的「根」目錄的完整路徑。

你會看到pathconvert任務使用傳入packagesrc 值來構建JAR文件的名稱(prop)。你應該可以做一個jar任務來完成那裏的工作。

我注意到,因爲你已經指定了dirset,所以你會得到 層次結構中的所有目錄,其中可能包括沒有類的目錄。 可能對您不成問題。

<target name="properties"> 
    <property name="src" location="src/java/org/pscode" /> 
</target> 

<target name="start" depends="properties"> 
    <foreach target="printOut" param="package"> 
     <param name="src" value="${src}" /> 
     <path> 
      <dirset dir="${src}" includes="**/*" /> 
     </path> 
    </foreach> 
</target> 

<target name="printOut"> 
    <pathconvert property="prop" dirsep="."> 
     <path location="${package}"/> 
     <map from="${src}/" to=''/> 
    </pathconvert> 
    <echo message="Package jar name: ${prop}.jar"/> 
</target> 
+0

「請參閱下面的略有調整的版本,希望能夠滿足您的需求。」當然是,謝謝!我提出的版本可能看起來不像你的榜樣,但這是你的例子,讓我知道我面臨的心理障礙。 「......你會得到層次結構中的所有目錄,其中可能包括沒有類的目錄,對你來說可能不是問題。」不,不應該。 AFAIR Jar任務忽略(或者有選擇忽略)「空罐子」。 – 2011-03-03 17:51:49

相關問題