我想打开多个JAR文件,然后使用ant构建脚本重建为一个JAR。这可能吗?如何使用ant来unjar多个JAR文件并将它们重建为一个JAR文件?
19
A
回答
14
是的,它可能与蚂蚁。 jar文件基本上是一个带有特殊清单文件的zip文件。所以为了unjar,我们需要解压罐子。 Ant包含一个unzip任务。
要解压/不能解压缩所有项目中的jar文件:
<target name="unjar_dependencies" depends="clean">
<unzip dest="${build.dir}">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</unzip>
</target>
显然,你需要声明$ {build.dir}和$ {} lib.dir第一。 <include name="**/*.jar" />
行告诉ant包含所有以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>
在这个例子中,我们有不同的文件集。在一个文件集中,我们包含所有编译的类。在另一个文件集中,我们包含了这个特定项目所依赖的两个配置文件。
7
是的!
你有两种可能性:
- 埃斯答案:
,从所有的jar文件在 定目录创建一个 JAR文件中的一个可能的解决方案:
<target name="dependencies.jar">
<jar destfile="WebContent/dependencies.jar">
<zipgroupfileset dir="lib/default/" includes="*.jar"
excludes="*.properties" />
</jar>
</target>
如果您不需要排除某些jar中的内容(例如某些可能会覆盖您的属性配置文件等),这非常有用。这里的排除属性是从dir属性中过滤掉文件。
- 使用zipfileset
另一个解决办法是使用zipfileset标签,其中不包括财产这次从里面过滤出的内容将被合并。
<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>
- 当然你也可以在两个标签(zipfileset和zipgroupfileset)结合同一个jar标签内得到最好的两个。
3
是的,这是可能的。
创建从指定目录中的所有jar文件一个jar文件的一个可能的解决方案:
<target name="dependencies.jar">
<jar destfile="WebContent/dependencies.jar">
<zipgroupfileset dir="lib/default/" includes="*.jar"
excludes="*.properties" />
</jar>
</target>
0
还有专门重新包装罐称为JarJar项目。您可以使用它将多个Jars重新包装成一个。根据您的要求,您甚至可以重命名类以防止版本冲突。
在这个例子中,我们包括jaxen.jar类,添加,改变任何一个类名“org.jaxen”开始启动以“org.example.jaxen”,而不是一个规则(在我们想象的世界中,我们控制example.org域):
<target name="jar" depends="compile">
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"
classpath="lib/jarjar.jar"/>
<jarjar jarfile="dist/example.jar">
<fileset dir="build/main"/>
<zipfileset src="lib/jaxen.jar"/>
<rule pattern="org.jaxen.**" result="[email protected]"/>
</jarjar>
</target>
相关问题
- 1. 如何将多个类文件转换为一个jar文件?
- 2. 如何使用Ant使用外部jar文件创建jar
- 3. 如何将多个Jar文件合并为一个可交付Jar?
- 4. 使NetBeans(ant)为一个项目生成多个jar文件
- 5. 如何unjar javac.classpath引用到文件夹中的每个jar?
- 6. 使用的JAR文件夹上创建一个jar文件
- 7. 创建一个包含另一个jar文件的Jar文件
- 8. 如何在maven-jar-plugin中使用jar:jar目标来构建多个jar文件
- 9. 创建一个.jar文件
- 10. 构建一个jar文件
- 11. 在Eclipse中将多个.java文件合并为一个.jar文件(它们相互依赖)
- 12. 如何创建一个.jar文件?
- 13. 使用一个罐子来构建一个jar文件
- 14. 如何用Ant脚本创建一个jar文件来启动程序
- 15. 一个jar文件
- 16. 从jar中提取文件后,如何重新将它们重新组合成一个有效的jar?
- 17. Ant构建不会使jar文件
- 18. 为程序创建一个.jar文件
- 19. 如何使用Ant将目录转换为.jar文件
- 20. 如何使用外部java jar文件创建jar文件
- 21. ant用源文件创建jar
- 22. 将一个jar文件拆分为两个不同的jar文件
- 23. 使用调用.jar文件的文件创建.jar文件
- 24. 使用Ant,如何从一个src目录创建独立的jar文件?
- 25. 如何使用另一个jar文件启动和停止jar文件?
- 26. 合并多个csv文件并将它们保存为一个csv文件
- 27. Maven构建如何依赖另一个jar文件中的jar文件?
- 28. 如何使用ANT修改jar文件中的文件?
- 29. 多个jar文件夹
- 30. 在linux中,如何创建包含外部jar文件的jar文件和使用ant的log4j.propeties文件