2011-03-03 62 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

相关问题