在添加一些属性时使用ant脚本进行压缩和解压缩

时间:2013-10-25 06:12:25

标签: java maven ant

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

3 个答案:

答案 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 taskforeach,但必须使用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>