2010-05-12 53 views

回答

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重新包裝成一個。根據您的要求,您甚至可以重命名類以防止版本衝突。

從他們getting started page

在這個例子中,我們包括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> 
相關問題