【问题标题】:how to exclude external jar while creating executable jar in eclipse or commandline?在eclipse或命令行中创建可执行jar时如何排除外部jar?
【发布时间】:2009-02-24 19:23:13
【问题描述】:

我在 Eclipse IDE 中编写了一个程序,它使用 BouncyCastle.jar 的 BouncyProvider 类。所以为了编译我的类,我在我的项目类路径中添加了 BouncyCastle.jar,它可以完美编译。

现在我想将我的项目导出为 Runnable JAR,所以当我从 Eclipse 执行此操作时,默认情况下它也会在该可运行 jar 中添加 BouncyCastle.jar 的类。

但我想让我的应用程序 jar 和 BouncyCastle.jar 彼此不同。

我怎样才能做到这一点?有人可以帮忙吗?

【问题讨论】:

    标签: eclipse jar


    【解决方案1】:

    听起来您想使用“导出 JAR 文件”向导而不是“导出可运行 JAR 文件”向导。在导出 runnable jar 文件时,Eclipse 会尝试将运行应用程序所需的所有内容打包到单个存档中。另一方面,“导出 JAR 文件”向导使您可以更好地控制归档中打包的内容。您仍然可以创建一个可运行的 jar 文件,但您必须确保在执行 jar 时在类路径中包含 BouncyCastle.jar。以下是分步说明:

    1. 单击“文件|导出”。出口 弹出对话框。
    2. 展开“Java”文件夹并选择 “JAR 文件”(不是“可运行的 JAR 文件”)。单击下一步。在 JAR 文件上 规格页面,选择 您希望包含在 jar 中的类 文件,并指定文件名 要创建的 JAR 文件。点击下一步。
    3. 在 JAR 打包选项页面上, 选择适合您的选项。 默认值可能没问题。 点击下一步。
    4. 在 JAR 清单规范中, 确保为您的 jar 文件选择“主类”。这是 将在何时执行的类 你执行jar文件。 如果你 将此留空,jar 文件将 无法运行。点击完成即可 创建 jar 文件。

    您应该能够通过从命令行执行“java -jar myjarfile.jar -classpath BouncyCastle.jar”来执行 jar 文件。

    【讨论】:

      【解决方案2】:

      很遗憾,看起来您实际上不能这样做。一个 JAR 不能使用另一个存储在其内部的 JAR。

      我会说,除非你有一个非常充分的理由不能解压你的 BouncyCastle.jar (比如许可问题?)

      只需让它解压(您可以通过在 Eclipse 中将 BouncyCastle.jar 添加为外部存档来完成:)

      Right-click on your project
      Build Path...
      Add External Archives...
      Add your archive
      Export as runnable JAR)
      

      并注意你的包名是否有冲突。

      Here's an open Java bug ID I found describing your situation

      One-JAR may help - a open source solution to your situation

      【讨论】:

      • 假设 OP 希望有两个单独的 jar,应用程序 jar 通过清单中的类路径指令引用 BouncyCastle jar。
      【解决方案3】:

      这似乎已添加到 Eclipse 3.5 Milestone 5 中。请参阅 News 了解最新版本和 bug 219530

      【讨论】:

        猜你喜欢
        • 2020-04-17
        • 2010-10-04
        • 2014-05-14
        • 2014-12-31
        • 1970-01-01
        • 2011-12-30
        • 2013-02-11
        相关资源
        最近更新 更多