【问题标题】:What is the difference between runnable jar library handling options?可运行的 jar 库处理选项有什么区别?
【发布时间】:2012-01-08 07:52:47
【问题描述】:

所以我将使用 Java Web Start 来部署 Java 应用程序。导出到 Runnable Jar 时,eclipse Helios 中有三个选项。

  • 将所需的库提取到 JAR 中
  • 将所需的库打包到 JAR 中
  • 将所需的库复制到 JAR 旁边的子文件夹中。

有什么区别,它们将如何影响我的 .jnlp 文件?

如果它是一个 jar,是不是更容易,因为我不必编写它使用的所有库的所有不同路径?

如果库和应用程序都有变化,单个 jar 会是更好的解决方案吗?或者我是否需要 <jar href=''> 为每个单独的库?

另外请注意,我需要使用 .dll 和 .so 文件等原生库。

【问题讨论】:

    标签: eclipse jar java-web-start


    【解决方案1】:
    1. 将所需的库提取到 JAR 中 - 从您的应用使用的库中提取实际的 .class 文件,并将这些 .class 文件放入可运行的 JAR 中。因此,可运行的 JAR 将不仅包含您的应用程序的 .class 文件,还包含您的应用程序使用的所有库的 .class 文件。

    2. 将所需的库打包到 JAR 中 - 将库的实际 JAR 文件 放入您的可运行 JAR。通常,JVM 无法加载 JAR 文件中的 JAR 文件。但是 Eclipse 向可运行的 JAR 添加了特殊的类来实现这一点。

    3. 将所需的库复制到 JAR 旁边的子文件夹中 - 将库 JAR 与可运行 JAR 完全分开,因此可运行 JAR 将仅包含应用程序的 .class 文件。

    选项 #2 很方便,因为它将所有内容整齐地打包到一个 JAR 中,并将库 JAR 与应用程序的 .class 文件分开。

    但是,将所有内容打包在单个 JAR 中(选项 #1 和 #2)的一个缺点是,如果您更新应用程序,那么用户将不得不下载更多数据来更新应用程序。如果 JAR 是分开的,那么用户只需下载包含您的应用程序代码的 JAR,而不是包含您的应用程序代码所有库代码的单个大型 JAR。 p>

    【讨论】:

    • 很好奇,创建一个不可运行的 jar 怎么样?有什么区别吗?
    • @KimJongWoo 您可以像java -jar myjar.jar 这样“执行”可运行的 JAR,因为 JAR 在其“META-INF/MANIFEST.MF”文件中定义了 main() 方法的位置。该文件中的“Main-Class”设置定义了具有main() 方法的类。 “普通”JAR 往往没有此设置,因此您不能以相同的方式“执行”它们。
    • @Michael,对于部署独立应用程序(无版本更新),选项 1 不是显而易见的选择吗?它似乎也是最精简的解决方案,并且成本最低,不是吗?
    • 提取的jar比包快吗?在加载速度和执行中
    • @Developer66 我的猜测是任何性能差异都可以忽略不计。
    猜你喜欢
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2014-09-20
    • 2017-05-31
    相关资源
    最近更新 更多