Fre*_*eit 1 java ant distribution
我有一个库,通常通过手工制作JAR及其依赖项的zip文件及其javadoc来分发.我想在ant中自动完成这项任务.
这个发行版的预期用例的一个怪癖是,当它被解压缩时,我的团队创建的JAR和任何库JAR都应该在同一个路径中.我们不能拥有myproject.zip/the.jar,myproject.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>
Run Code Online (Sandbox Code Playgroud)
它唯一没有做的是'展平'或将库JAR移动到zip的根路径.
我已经尝试过使用<zipfileset prefix="/">libs但是没有按预期工作.
该prefix属性zipfileset用于描述文件在创建的zip文件中的显示位置.既然你希望jar文件出现在zip文件的根目录下,你不需要指定它,并且可以将其保留(我不知道将它设置为"/"的效果是什么,我认为省略它会更安全.
您的问题似乎是您的库存储在您的lib目录下的子目录中,但您希望它们直接位于zip文件的根目录中.与任务不同,'zip'任务copy不直接接受映射器来更改文件在zip中的显示方式,但如果您使用的是Ant 1.7或更高版本,它将接受资源收集.你可以使用mappedresources带a fileset和a 的元素flattenmapper来获得你想要的效果:
<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>
Run Code Online (Sandbox Code Playgroud)
这意味着您不必先使用copy将罐子放入临时区域.
| 归档时间: |
|
| 查看次数: |
7750 次 |
| 最近记录: |