java - 可运行的 jar 找不到库

标签 java eclipse jar executable-jar

我有一个项目,其中有一些依赖的 jars。我已将依赖 jar 添加到项目中,然后将它们添加到构建路径中。 当我从 eclipse 运行它时,它运行良好。

现在我想把它变成一个可运行的 jar 。 一旦我将其导出为可运行 jar 以及选项“将所需的库打包到生成的 Jar 中”。

当我运行 jar 时,它抛出无法找到符号错误。这些符号存在于依赖的 jar 中,我不知道为什么会发生这种情况。

有人可以帮我吗?

最佳答案

当您将项目导出到可运行的 JAR 文件时,您应该使用选项将所需的库提取到生成的 JAR,而不是将所需的库打包到生成的 JAR 中

不同之处在于,为了打包所需的库,它将获取 JAR 文件并将它们放入您的 JAR 文件中。因此该 JAR 文件中还包含其他 JAR 文件。为此,您的主程序必须深入了解如何读取主 JAR 文件中的这些 JAR 文件。

为了澄清,结果文件将如下所示:

project.jar/
   com/yourproject/Main.class
   dependencyA.jar
   dependencyB.jar

对于另一个选项,将所需的库提取到生成的 JAR 中,将会发生的情况是,这些依赖项将被解压缩,然后打包到 JAR 文件中。这次不是作为 JAR 文件,而是作为类和资源文件。此方法将允许 Java 从主 JAR 文件中查找依赖类文件。

现在的结果将如下所示

project.jar/
   com/yourproject/Main.class
   com/dependencyA/SomeClass.class
   com/dependencyA/SomeOtherClass.class
   ...

这种格式对于 Java 进程来说是可读的,它将在 JAR 中查找类和资源文件,而不是嵌套的 JAR 文件。

关于java - 可运行的 jar 找不到库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26037161/

相关文章:

java - 将 HikariCP 阴影放入 jar 中将不起作用

java - self 更新程序

java - 通过 Java 使用 Drive API

java - 在一个项目中混合 java、scala 和 xtend 文件?

java - Tomcat 7 的查看 session 不可用或已过期

reflection - 你能列出从 JAR 文件中导入的内容吗?

java - 将 shell 脚本转换为 jar 文件

java - 使用 junit 进行迭代测试

java - 使用 C 语言通过 FFmpeg 保存部分视频

java - TestNG:如何以编程方式运行自定义 TestNG.XML 文件