【问题标题】:Trouble building executable jar in IntelliJ在 IntelliJ 中构建可执行 jar 时遇到问题
【发布时间】:2014-09-23 11:24:18
【问题描述】:

我正在尝试使用 these instructions 将我的项目导出到 IntelliJ 中的 jar 文件,但失败了。

我在我的应用程序的这一行收到NullPointerException

ClassLoader.getSystemClassLoader().getResource(".").getPath(); 

请注意,同样的项目在 Eclipse 中可以正常导出。

我尝试将清单中的 Class-Path 更改为 .,因为我注意到 Eclipse 导出的 jar 中发生了这种变化。

然后,我的应用程序会更进一步,但在尝试加载包含在我的 jar 中的任何资源文件时会退出。方法如下:

假设我的罐子被放置在

/Users/me/screwed.jar

当我的应用程序尝试在 jar 文件的根目录中打开 resource.file 时,它会在此处搜索它:

/Users/me/resource.file

这会触发NullPointerException

团队,我该如何解决这个问题?

【问题讨论】:

    标签: java jar intellij-idea manifest executable-jar


    【解决方案1】:

    使用这一行来加载你的路径:

    this.getClass().getClassLoader().getResource(".").getPath();
    

    这应该是您的 jar 文件的根目录,并允许您在其中打开资源。

    对于静态上下文,使用

    MyStaticClassName.class.getClassLoader().getResource(".").getPath();
    

    其中 MyStaticClassName 是一些静态实用程序类。

    【讨论】:

    • 对于任意文件类型呢?另外,很遗憾不得不为构建问题修改我的代码,我宁愿修复构建过程。
    • 我经常在我的应用程序中传递File 对象,我通过扩展在我的问题中获得的路径来实例化每个对象。
    • 谢谢,问题是,我也需要在静态环境中使用它,但您的建议不起作用(我认为)
    • 另一个编辑。我会让 MyStaticClassName 成为一个实用程序类,它公开一个方法来返回所有其他类可以共享的路径。
    • 这在 IDE 中仍然有效,但在导出的 jar 中无效:(
    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2019-09-07
    • 2018-07-20
    • 1970-01-01
    • 2015-12-24
    • 2013-06-06
    相关资源
    最近更新 更多