2011-08-19 107 views
1

我有一個jar文件,每個java文件有兩個類文件。每個類在jar文件中有兩個類文件

的Java:

Foo.java 
Bar.java 

類文件:

Foo.class 
Foo.class 
Bar.class 
Bar.class 

我已經驗證了,只有一個每類java文件。 java文件不包含內部類。 我正在使用ant jar-task來創建jar文件。在執行任務之前,構建目錄中每個類只有一個類文件。

我使用jar -tf jarfile.jar或當我在zip程序中查看它時看到雙類文件。當我解壓縮文件時,zip程序會詢問是否應覆蓋現有文件。

這是怎麼發生的?

+0

也許你已經編譯了源碼兩次? – RoflcoptrException

+3

當你提取罐子時會發生什麼? – Stoney

+0

'Foo.java'看起來如何? – aioobe

回答

0

我想我找到了問題。這是jar任務:

<jar basedir="${build.class.dir}" jarfile="${dist.dir}/${subproject}.jar"> 
     <fileset dir="${build.class.dir}" /> 
    </jar> 

正如我在Ant網站閱讀

這個任務形成隱含文件集,並支持大多數屬性(DIR變成>的basedir)以及嵌套和元素。

所以看起來標籤或者basedir都是不必要的。至少它工作.fine如果我註釋掉fileset標籤。

感謝您的幫助和指點!

3

您是否在使用Ant Jar任務?如果是這樣,那麼你絕對可以在同一個jar文件中獲得重複的文件。 重複屬性用於停止該屬性。

請注意,zip格式允許相同的完全限定名稱的多個文件到一個存檔中存在 。這已被記錄爲導致各種問題的用戶不知情。如果您希望避免此行爲,則必須將重複屬性設置爲其他 的值,而不是其默認值「add」。

從螞蟻手冊:http://ant.apache.org/manual/Tasks/jar.html

+1

我能夠本地化與重複=「失敗」的問題。我知道我可以使用duplicate =「preserve」,但我更關心這種情況會如何發生。 – yottamoto

+0

我遇到了這個問題,將來自不同位置(在構建期間創建)的相同文件添加到jar文件中。 –

相關問題