【问题标题】:Runnable JAR not working with referenced libraries可运行的 JAR 不适用于引用的库
【发布时间】:2012-05-01 04:08:02
【问题描述】:

我想通过导出在 Eclipse 中创建一个包含引用库的可运行 JAR,即 jackson。在 Eclipse 提供导出到可运行 JAR 之前,曾经有 fat jar 似乎是 goto 解决方案。

从这个question,第一个选项将是我正在寻找的。由于目前是一个小项目,因此始终将所有内容放在一起不会有问题(而且对我来说更容易,因为我刚开始使用 JAR、runnables 和 jnlp)

当我尝试启动它时,会出现一个警告窗口,提示存在问题并尝试在控制台中找到它(我无法打开)。

如果我删除对这个引用库的任何使用,一切都会完美运行(除了它根本没有做我想要的部分)。窗口看起来像我设计的那样,但没有库就没有任何功能。

我什至没有堆栈跟踪来帮助解决这个问题。我创建了没有任何引用库的其他项目,一切都很好。所以我已经缩小了范围。

由于我让 Eclipse 处理导出和所有事情,我认为您不需要清单来查看它是否正常。您可能有任何问题,我会提供您需要的信息。不用说,项目直接从 Eclipse 运行。

日食 版本:Indigo Service Release 2 内部版本号:20120216-1857


编辑Baqueta的回答

当我这样做时会发生自定义 RuntimeException。我在这里有点困惑。这是我的代码的简单解释。 我有一个使用引用库(jackson)的实用程序类(UtilityJSON)。该实用程序类的构造函数实例化在引用库中定义的对象,我们称之为映射器。 UtilityJSON 的一种方法使用“mapper”方法。此时引发异常。为什么我感到困惑的是“映射器”已成功实例化,但使用它的方法会引发异常。如果 jar 找不到引用的库,它可能无法创建对象“映射器”。但是从 Eclipse 运行项目一切正常。 运行可执行jar时有什么方法可以调试吗?也许在控制台中回显一些东西。


编辑 2

我可能发现了错误。我的程序读取项目内文件夹中的 *.txt 文件。在探索 jar 的内容时,我发现此文件夹未包含在内,因此出现异常。所以现在的问题变成了:我如何包含这个文件夹?它位于项目的根文件夹中。

【问题讨论】:

  • 当您尝试运行 Jar 时收到什么错误消息?转到命令提示符并键入java -jar <your jar name>.jar,它应该会告诉您出了什么问题...
  • 您好,抱歉,我错过了您的回答。请查看我的编辑。
  • 据我所知,您正试图从资源管理器中启动它,听起来它甚至在启动控制台之前就已经死了。通过从命令行启动它,您可能会获得更多信息。在 cmd(或等效项)中到包含 jar 的文件夹并键入 java -jar <yourjarname>.jar。它有望为您提供一些有用的信息,说明它无法启动的原因......
  • 没有资源管理器,只有终端(在 Mac 上)。 Ran java -jar Test.jar 我在终端中遇到异常。请参阅我的第二次编辑。看来问题可能不是我想的那样。

标签: java eclipse jar executable executable-jar


【解决方案1】:

您可以尝试以下方法:

  1. 在 Eclipse 中,转到 Project->Properties。
  2. 从左侧列中选择“Java 构建路径”。
  3. 选择“订购和导出”选项卡。
  4. 在列表中找到“jackson”并确保已选中。

编辑 要回答您更新的问题:

在 Eclipse 中,在 Package Explorer 中找到 *.txt 文件。右键单击它并选择构建路径->添加到构建路径。然后按照上面的说明确保文件包含在 Jar 中。最后,进行清理并重建。

如果您要添加更多资源,通常的做法(而且很有意义!)有一个资源文件夹(通常称为“res”)。然后,您可以将整个文件夹添加到构建路径中,以便其中的所有资源都包含在 Jar 中。

【讨论】:

  • 没有检查。试过了,还是不行。我已经尝试使用前两个选项来导出可运行文件。
  • 是的,我会尽快选择正确的答案。拥有一个资源文件夹确实很有意义。我创建了一个并将所有内容移到那里。我更新了用于打开文件的路径,我的所有 JUnit 都成功了。 'rsc' 已添加到 Build Path 中,但 jar 仍未运行,表示无法打开文件(没有这样的文件或目录)。我显然已经接近让它发挥作用了。因此,一旦完成,我将关闭此问题。
  • 非常感谢,现在一切正常。我不得不使用this,尽管我目前不知道为什么。为了使它工作,我还必须将我的 *.txt 文件直接移动到使用它们的包中,这绝对是可怕的。肯定有另一种解决方案,我会继续寻找。至于包括引用的库,一切都很好。再次感谢您。
  • 很高兴为您提供帮助。如果您无法自己弄清楚编译后的 Jar 中的路径发生了什么,我建议您在此处搜索。如果您找不到任何听起来像您的问题的东西,那么您将要提出另一个问题。祝你好运!
  • 如果有人有类似的问题,我发布了这个question。这个问题还有一些问题有待解决,但有几个答案。
【解决方案2】:

通过编写启用 java 控制台

javaws -viewer

在终端中。关闭缓存查看器并单击高级选项卡。打开Java-Console,点击“启用控制台”。

【讨论】:

  • 不知道打开 Java 首选项的命令行,但我已经激活了它。一旦选择了该单选按钮,下次我尝试运行我的程序时它应该会打开控制台,但它没有。只是提示窗口无法打开。
  • 不知道法语的确切翻译,但它类似于:“无法启动文件 Test.jar”。在控制台中搜索潜在的错误消息。
猜你喜欢
  • 2015-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
相关资源
最近更新 更多