【问题标题】:compiled Jar file contains excess class files编译后的 Jar 文件包含多余的类文件
【发布时间】:2010-11-20 17:00:17
【问题描述】:

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

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

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

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

【问题讨论】:

  • Netbeans 如何知道您正在使用哪些类?据它所知,您可以通过反思来访问它们。
  • 编译器不知道我正在使用所需的类文件并且不能将这些文件包含在最终的 jar 中,我是从 jar 文件大小的角度来看的。例如,如果我将一个 zip 或 jar 附加到包含 100 个 .class 文件的资源目录,那么所有 100 个数字都会放入最终编译的 jar 中。
  • 是的,他们会的。但是,如果您对反射没有做任何有趣的事情,那么 izb 的答案应该可以很好地工作。
  • 您可以随时自行删除此类。打开 zip 库,删除不需要的类,再次 zip 库并使用它。

标签: java class netbeans java-me jar


【解决方案1】:

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

【讨论】:

  • 我将混淆级别设置为最大,jar 文件现在已减小到原来大小的一半,甚至更少的类文件显示在最终的 jar 中。但我不明白为什么我使用的类没有进入最终的 jar。
  • Proguard 对混淆缩容过程中的类进行重命名。如果要保留类名,请在混淆时使用 keepattributes 标志。有关各种选项,请参阅 Proguard 文档
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-11-20
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 2014-01-17
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多