我想打開多個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文件