Java 编译的Jar文件包含多余的类文件

Java 编译的Jar文件包含多余的类文件,java,class,netbeans,java-me,jar,Java,Class,Netbeans,Java Me,Jar,在一个NetBeans移动项目中,我在Resources文件夹中附加了一个zip文件 这个zip文件包含大约10个.class文件 在我的mobility应用程序中,我实际上使用了zip文件中的4个类,但是当我编译和构建项目时,目标jar文件似乎包含zip文件中的所有10.class文件 我认为只有应用程序使用的类文件才被编译到最终的jar中。 可能出了什么问题?我认为您对netbeans将如何处理您的附加资源文件做出了错误的假设。它不会自动找出您正在使用和未使用的。不过,可能会有第三方工具提供

在一个NetBeans移动项目中,我在Resources文件夹中附加了一个zip文件

这个zip文件包含大约10个.class文件

在我的mobility应用程序中,我实际上使用了zip文件中的4个类,但是当我编译和构建项目时,目标jar文件似乎包含zip文件中的所有10.class文件

我认为只有应用程序使用的类文件才被编译到最终的jar中。
可能出了什么问题?

我认为您对netbeans将如何处理您的附加资源文件做出了错误的假设。它不会自动找出您正在使用和未使用的。不过,可能会有第三方工具提供帮助。

我认为您对netbeans将如何处理所附的资源文件做出了错误的假设。它不会自动找出您正在使用和未使用的。不过,可能会有第三方工具提供帮助。

尝试在jar上使用proguard自动删除midlet类未使用的类。

尝试在jar上使用proguard自动删除midlet类未使用的类。

Netbeans如何知道您正在使用哪些类?编译器难道不知道我正在使用所需的类文件,并且不能将它们包含在最终的jar中吗?我是从jar文件大小的角度来讨论的。例如,如果我将一个zip或jar附加到包含100个.class文件的resources目录,那么所有的100个数字都会被添加到最终编译的jar中。但是如果你对反射没有做任何有趣的事情,izb的答案应该很有效。你可以自己删除这些类。打开zip库,删除您不需要的类,再次压缩库并使用它。Netbeans如何知道您正在使用哪些类?编译器难道不知道我正在使用所需的类文件,并且不能将它们包含在最终的jar中吗?我是从jar文件大小的角度来讨论的。例如,如果我将一个zip或jar附加到包含100个.class文件的resources目录,那么所有的100个数字都会被添加到最终编译的jar中。但是如果你对反射没有做任何有趣的事情,izb的答案应该很有效。你可以自己删除这些类。打开zip库,删除您不需要的类,再次压缩库并使用它。我将混淆级别设置为max,jar文件现在已减少到原来大小的一半,甚至更少的类文件显示在最终的jar中。但是我不明白为什么我使用的类没有被放入最终的jar中。Proguard在混淆和收缩的过程中重命名了这些类。如果要保留类名,请在混淆时使用keepattributes标志。请参阅Proguard文档,了解各种选项。我将混淆级别设置为max,jar文件现在已减小到其原始大小的一半,在最终的jar中显示的类文件甚至更少。但是我不明白为什么我使用的类没有被放入最终的jar中。Proguard在混淆和收缩的过程中重命名了这些类。如果要保留类名,请在混淆时使用keepattributes标志。有关各种选项,请参阅Proguard文档