如何使用ant来解压多个JAR文件并将它们重建为一个JAR文件?

she*_*536 19 ant jar unjar

我想解开多个JAR文件,然后使用ant构建脚本重建为一个JAR.这可能吗?

Ces*_*sar 14

是的,这可能与蚂蚁有关.jar文件基本上是带有特殊清单文件的zip.因此,为了解开,我们需要解压缩罐子.Ant包含一个解压缩任务.

要解压缩/解压缩项目中的所有jar文件:

<target name="unjar_dependencies" depends="clean">
    <unzip dest="${build.dir}">
        <fileset dir="${lib.dir}">
            <include name="**/*.jar" />
        </fileset>    
    </unzip>
</target>
Run Code Online (Sandbox Code Playgroud)

显然你需要先声明$ {build.dir}和$ {lib.dir}.该行<include name="**/*.jar" />告诉ant包含最终以jar扩展名结尾的所有文件,您可以调整包含以满足您的需求.

要将所有内容打包到jar中,请使用jar任务:

<target name="make_jar" depends="compile, unjar_dependencies">
    <jar basedir="${build.dir}"
         destfile="${dist.dir}/${project_name}.jar">
        <manifest>
            <attribute name="Main-Class" value="${mainclass}" />
        </manifest>
        <fileset dir="${build.dir}">
            <include name="**/*.class" />
        </fileset>
        <fileset dir="${src.dir}">
            <include name="applicationContext.xml" />
            <include name="log4j.properties" />
        </fileset>
    </jar>
</target>
Run Code Online (Sandbox Code Playgroud)

在此示例中,我们包含不同的文件集.在一个文件集中,我们包括所有已编译的类.在另一个文件集中,我们包含此特定项目所依赖的两个配置文件.


Thi*_*rry 7

是的 !

你有两种可能性:

  • Espen回答:

一种可能的解决方案,从给定目录中的所有jar文件创建一个jar文件:

<target name="dependencies.jar">
    <jar destfile="WebContent/dependencies.jar">
        <zipgroupfileset dir="lib/default/" includes="*.jar" 
              excludes="*.properties" />
    </jar>
</target>
Run Code Online (Sandbox Code Playgroud)

如果您不需要排除某些jar中的内容(例如某些属性配置文件可能会覆盖您的内容等),这将非常有用.这里的排除属性是从dir属性中过滤掉文件.

  • 使用zipfileset

另一个解决方案是使用zipfileset标记,其中excludes属性这次将过滤掉要合并的jar中的内容.

<jar destfile="your_final_jar.jar" filesetmanifest="mergewithoutmain">
    <manifest>
        <attribute name="Main-Class" value="main.class"/>
        <attribute name="Class-Path" value="."/>
    </manifest>
    <zipfileset 
       excludes="META-INF/*.SF"
       src="/path/to/first/jar/to/include.jar"/>
</jar>
Run Code Online (Sandbox Code Playgroud)
  • 当然,您可以将两个标签(zipfileset和zipgroupfileset)组合在同一个jar标签中,以获得两者中最好的一个.