我需要在我的文件夹中解压缩多个jar并在Manifest.MF中添加一些条目,并且必须再次单独压缩jar。我不需要组合罐子。但我需要新的Manifest条目的indivudal罐子。我怎么能用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,我必须在build.xml中再次重复上面的脚本
但是我需要一般地这样做,以便它可以拾取我的jar文件并添加manifest属性并创建两个与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>
答案 0 :(得分:1)
听起来你可以用宏来做到这一点:
<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"/>
答案 1 :(得分:0)
只需使用ant Jar task。
示例:
<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的unzip task
示例:
<zip destfile="new.jar">
<zipfileset src="old.jar">
<exclude name="do/not/include/this/class"/>
</zipfileset>
</zip>
答案 2 :(得分:0)
您可以使用AntCall task和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>