[英]How to use ant unjar file from a jar into a specific directory without path from jar
[英]How do you use ant to unjar multiple JAR files and rebuild them into one JAR file?
我想解開多個JAR文件,然后使用ant構建腳本重建為一個JAR。 這可能嗎?
是的,這可能與螞蟻有關。 jar文件基本上是帶有特殊清單文件的zip。 因此,為了解開,我們需要解壓縮罐子。 Ant包含一個解壓縮任務。
要解壓縮/解壓縮項目中的所有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中,請使用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>
在此示例中,我們包含不同的文件集。 在一個文件集中,我們包括所有已編譯的類。 在另一個文件集中,我們包含此特定項目所依賴的兩個配置文件。
是的 !
你有兩種可能性:
一種可能的解決方案,從給定目錄中的所有jar文件創建一個jar文件:
<target name="dependencies.jar">
<jar destfile="WebContent/dependencies.jar">
<zipgroupfileset dir="lib/default/" includes="*.jar"
excludes="*.properties" />
</jar>
</target>
如果您不需要排除某些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>
是的,這是可能的。
一種可能的解決方案,從給定目錄中的所有jar文件創建一個jar文件:
<target name="dependencies.jar">
<jar destfile="WebContent/dependencies.jar">
<zipgroupfileset dir="lib/default/" includes="*.jar"
excludes="*.properties" />
</jar>
</target>
還有一個專門用於重新包裝罐子Jarjar的項目。 您可以使用它將多個罐子重新包裝成一個。 根據您的要求,您甚至可以重命名類以防止版本沖突。
從他們的入門頁面 :
在這個例子中,我們包含來自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="org.example.@1"/>
</jarjar>
</target>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.