我需要解压缩文件夹中的多个jar并在Manifest.MF中添加一些条目,并且必须单独再次压缩jar。我不需要组合罐。但是我需要带有新清单条目的个人罐子。如何使用 ant 脚本执行此操作?有什么办法可以做到吗。
例如。我的位置有两个 jar 文件,上面写着 test1.jar、test2.jar
因此,如果我使用此代码解压缩
<jar destfile="test1.jar">
<fileset dir="build/main/classes"/>
<zipfileset includes="**/*.class" src="lib/main/test.jar"/>
<manifest>
<attribute name="permission" value="all-permissions"/>
</manifest>
</jar>
再说一遍,如果我要压缩它
<zip destfile="test1.jar">
<zipfileset src="test.jar">
<exclude name="do/not/include/this/class"/>
</zipfileset>
</zip>
在这种情况下,为了处理test2.jar,我必须在构建中再次重复上述脚本.xml
但是我一般需要这样做,以便它可以选取我的 jar 文件并添加清单属性并创建两个与 test1.jar 和 test2.jar 同名的 jar。
像这样:
<jar destfile="*.jar">
<fileset dir="build/main/classes"/>
<zipfileset includes="**/*.class" src="lib/main/test.jar"/>
<manifest>
<attribute name="permission" value="all-permissions"/>
</manifest>
</jar>
听起来你可以用宏来做到这一点:
<macrodef name="updatemanifest">
<attribute name="jarfile"/>
<sequential>
<local name="manifest"/>
<tempfile property="manifest" destdir="${java.io.tmpdir}"
suffix=".mf"/>
<copy tofile=${manifest}">
<zipentry zipfile="@{jarfile}" name="META-INF/MANIFEST.MF"/>
</copy>
<manifest file="${manifest}" mode="update">
<attribute name="permission" value="all-permissions"/>
</manifest>
<jar destfile="@{jarfile}" manifest="${manifest}" update="true"/>
<delete file="${manifest}"/>
</sequential>
</macrodef>
<updatemanifest jarfile="build/test1.jar"/>
<updatemanifest jarfile="build/test2.jar"/>
只需使用 ant 的 Jar 任务即可。
例:
<jar destfile="build/main/checksites.jar">
<fileset dir="build/main/classes"/>
<zipfileset includes="**/*.class" src="lib/main/some.jar"/>
<manifest>
<attribute name="Main-Class" value="com.acme.checksites.Main"/>
</manifest>
</jar>
对于解压缩,您可以使用 ant 的解压缩任务
例:
<zip destfile="new.jar">
<zipfileset src="old.jar">
<exclude name="do/not/include/this/class"/>
</zipfileset>
</zip>
AntCall 任务和 foreach,但你必须使用 ant-contrib:
<target name="myMaintask">
<foreach target="UnzipChangeZip" param="fileName">
<fileset dir="${myDirectoryWithJars}" casesensitive="yes">
<include name="**/*.jar"/>
</fileset>
</foreach>
</target>
<target name="UnzipChangeZip">
<echo message="fileName=${fileName}"/>
<jar destfile="${fileName}">
<fileset dir="build/main/classes"/>
<zipfileset includes="**/*.class" src="lib/main/test.jar"/>
<manifest>
<attribute name="permission" value="all-permissions"/>
</manifest>
</jar>
<zip destfile="${fileName}">
<zipfileset src="test.jar">
<exclude name="do/not/include/this/class"/>
</zipfileset>
</zip>
</target>