使用 ant 脚本压缩和解压缩,同时添加一些属性



我需要解压缩文件夹中的多个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>

最新更新