如何使用Ant将目录转换为.jar文件

时间:2009-10-12 12:27:24

标签: ant jar

如何将目录列表转换为.jar文件列表? 似乎使用Copy Task和Mappers是正确的方法,但我没有找到任何嵌套元素从目录创建jar文件。

当然,目录列表将被计算,而不是在ant脚本中进行硬编码。

例如,foo目录包含bar1,bar2和bar3目录。该脚本将从bar1目录创建bar1.jar,从bar2目录创建bar2.jar,从bar3目录创建bar3.jar 该脚本将从新添加的bar4目录创建一个bar4.jar,而不会对脚本进行任何更改(没有硬编码列表)。

先谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

您可以使用subant任务执行此操作。例如:

<project name="jars" default="jar" basedir=".">
    <property name="dir.build" value="${basedir}/build"/>
    <property name="dir.root" value="${basedir}/foo"/>

    <target name="init">
        <tstamp/>
        <mkdir dir="${dir.build}"/>
    </target>

    <target name="jar" depends="init">
        <!-- ${ant.file} is the name of the current build file -->
        <subant genericantfile="${ant.file}" target="do-jar">

            <!-- Pass the needed properties to the subant call. You could also use
                 the inheritall attribute on the subant element above to pass all
                 properties. -->
            <propertyset>
                <propertyref name="dir.build"/>
            </propertyset>

            <!-- subant will call the "do-jar" target for every directory in the
                 ${dir.root} directory, making the subdirectory the basedir. -->
            <dirset dir="${dir.root}" includes="*"/>
        </subant>
    </target>

    <target name="do-jar">
        <!-- Get the basename of the basedir (bar1, bar2, etc.) -->
        <basename file="${basedir}" property="jarname"/>

        <jar jarfile="${dir.build}/${jarname}.jar" basedir="${basedir}"/>
    </target>
</project>

答案 1 :(得分:0)

您可以使用相应的Jar task以及foreach ant-contrib扩展任务。

样本:

<foreach list="${hmProjectsList}" delimiter="/," 
         target="cvsCheckOut" param="hmProjectDir" inheritall="true" />