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