使用ant创建一个带有JAR和库和doc的可分发zip文件

时间:2011-04-27 14:40:21

标签: java ant distribution

我有一个库,通常通过手工制作JAR及其依赖项的zip文件及其javadoc来分发。我想在ant中自动完成这项任务。

这个发行版的预期用例的一个怪癖是,当它被解压缩时,我的团队创建的JAR和任何库JAR都应该在同一个路径中。我们不能将myproject.zip/the.jarmyproject.zip/lib/a_library.jar都放在zip的根路径中。

我使用以下任务取得了很大成功:

<target name="myproject.distributable" depends="artifact.mycompany_myproject, myproject.javadoc"
            description="Build the distributable JAR for myproject">
        <zip destfile="${basedir}/dist/myproject.zip">
            <fileset file="${temp.jar.path.mycompany_myproject.jar}"/>
            <zipfileset dir="mycompany_myproject/lib" prefix="lib">
                <patternset id="myproject.dist.libs">
                    <include name ="**/*.jar"/>
                </patternset>
            </zipfileset>
            <zipfileset dir="docs/myproject" prefix="docs"/>
        </zip>
    </target>

唯一不做的是'展平'或将库JAR移动到zip的根路径。

我已经尝试将<zipfileset prefix="/">用于libs但是没有按预期工作。

2 个答案:

答案 0 :(得分:7)

prefix的{​​{1}}属性用于描述文件在创建的zip文件中的显示位置。既然你希望jar文件出现在zip文件的根目录下,你不需要指定它,并且可以将其保留(我不确定将它设置为“/”的效果是什么,我认为省略它会更安全。)

您的问题似乎是您的库存储在zipfileset目录下的子目录中,但您希望它们直接位于zip文件的根目录中。与lib任务不同,'zip'任务不直接接受映射器来更改文件在zip中的显示方式,但如果您使用的是Ant 1.7或更高版本,它将接受{{3} }。您可以将resource collection元素与copymappedresources一起使用,以获得您所追求的效果:

fileset

这意味着您不必先使用<target name="myproject.distributable" depends="artifact.mycompany_myproject, myproject.javadoc" description="Build the distributable JAR for myproject"> <zip destfile="${basedir}/dist/myproject.zip"> <fileset file="${temp.jar.path.mycompany_myproject.jar}"/> <mappedresources> <fileset dir="mycompany_myproject/lib" includes="**/*.jar" /> <flattenmapper /> </mappedresources> <zipfileset dir="docs/myproject" prefix="docs"/> </zip> </target> 将罐子放入临时区域。

答案 1 :(得分:0)

根据this postzipgroupfileset应该可以做到;我自己没试过......