2011-08-19 110 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文件中。 –

相关问题