我将程序包部署到单独的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