2013-05-05 40 views
4

我的項目文件夾在一堆相關的jar文件:需要一個Ant任務,包括在最後的JAR的/ lib目錄一組的jar文件

/lib/someapi-1.1.1/main.jar 
/lib/someotherapi-2.2.2/api-2.2.2.jar 
/lib/... 

我建立一個JAR文件,我的申請要求依賴罐子得到包括在罐子裏的/ lib文件夾中的最後罐子,所以最終的罐子應該有一個結構是這樣的:

/org/me/myclasses.class 
/lib/main.jar 
/lib/api-2.2.2.jar 

的平坦化如何獲得包括/lib/*.jar文件在我的最終jar文件的/ lib目錄中?


澄清

我基本上只是試圖讓一組扁平資源文件,並添加到給定的目錄在我的最後罐子。

+0

我並不真正需要的可執行文件的功能和一罈子的定製ClassLoader,我在這裏使用Hadoop和應用已經處理了拆包的jar文件的/ lib目錄,並把它們添加到自己的類路徑。我只需要將文件壓縮到/ lib,我可以手動執行,但我想自動執行它。 – 2013-05-05 08:15:30

+0

是的,但我不知道如何讓我想要的文件變平並添加到我的jar中的指定路徑。 – 2013-05-05 08:19:25

回答

3

我看到的最簡單的方法是使用copy任務及其flatten屬性將allyour jar複製到臨時文件夾,並將此臨時目錄的jar包括到目標jar中。


由提問者

這裏添加附加的細節是最終的ANT目標是什麼樣子(備查):

<target name="dist"> 
    <mkdir dir="${classes}/lib"/> 
    <copy flatten="true" todir="${classes}/lib" includeemptydirs="false"> 
     <fileset dir="lib"> 
      <include name="**/*.jar" /> 
     </fileset> 
    </copy> 
    <jar destfile="${dist}/MyOneBigJar.jar"> 
     <fileset dir="${classes}"/> 
    </jar> 
    </target> 
+0

完美的工作,容易做到。謝謝! – 2013-05-05 08:38:17

4

如果你想要做跳過複製步驟中,可以這樣做。它使用<mappedresources>從源lib目錄平鋪到classes/lib區域。

<jar destfile="${dist}/MyOneBigJar.jar"> 
    <fileset dir="${classes}"/> 
    <mappedresources> 
     <fileset dir="lib"> 
      <include name="**/*.jar" /> 
     </fileset> 
     <chainedmapper> 
      <flattenmapper /> 
      <globmapper from="*" to="classes/lib/*" /> 
     </chainedmapper> 
    </mappedresources> 
</jar> 
相關問題