Intellij构建破JAR神器

Intellij building broken JAR artifact

我正在尝试为依赖于一个外部库的项目构建一个 JAR 工件 nbvcxz and one imported library lanterna:

在 Project Structure 的 Artifacts 下添加 JAR 时,使用 JAR -> from modules with dependencies:

我添加到导入库中的附加功能是:

编译 lanterna 库的 SNAPSHOT jar 在 运行 从 IDE 中运行应用程序时按预期工作,所有上述功能和外部库工作完美。然而,当我构建和 运行 JAR 工件时,window 的标题被更新并且 window 本身不可恢复,但自定义图标未显示并选择初始启动屏幕会导致它中断。

从 Intellij 中 运行ning 时的行为(正确):

运行使用 JAR 工件时的行为(不正确):

我发现有趣的是,构建的工件在显示初始屏幕时使用了 lanterna 库(lanterna 是用于 text-based GUI 的 semi-graphical 库),但不知何故省略了一些我对它所做的更改。 nbvcxz 库​​是从 maven 导入的,并且按预期工作。

如有任何帮助,我们将不胜感激!

我发现了问题 - 我使用的是源文件夹中未指定的文本文件,因此打包的 JAR 在执行期间无法找到它,这导致我从动作列表框。恼人的是,尽管捕获并打印了任何异常,但我没有在控制台中收到任何错误消息。直到我添加

JOptionPane.showMessageDialog(null, t.getClass().getSimpleName() +": " + t.getMessage()); throw t; }}

告诉我找不到文件。我已经删除了该文件,因为它被用于 R/W 通常建议不要这样做,因为 JAR 文件应该是不应更改的档案。

图标不显示是由于类似的问题,因为它也没有包含在源文件夹中,但也没有被正确引用。移动到正确的位置并添加

ImageIcon img = new ImageIcon(this.getClass().getResource("/pwdIcon.png"));

它运行良好。

我想我在这里可以一石二鸟。我不知道 JAR 文件是如何精确打包东西的,所以我假设如果它在 IDE 中工作,那么它将作为 JAR 工作而不使用源文件夹和适当的引用。