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)
在此示例中,我们包含不同的文件集.在一个文件集中,我们包括所有已编译的类.在另一个文件集中,我们包含此特定项目所依赖的两个配置文件.
是的 !
你有两种可能性:
一种可能的解决方案,从给定目录中的所有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标记,其中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)