簡體   English   中英

如何使用ant來解壓多個JAR文件並將它們重建為一個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>

在此示例中,我們包含不同的文件集。 在一個文件集中,我們包括所有已編譯的類。 在另一個文件集中,我們包含此特定項目所依賴的兩個配置文件。

是的 !

你有兩種可能性:

  • Espen回答:

一種可能的解決方案,從給定目錄中的所有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標記,其中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>
  • 當然,您可以將兩個標簽(zipfileset和zipgroupfileset)組合在同一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM