最终jar中src / main下的Maven包资源文件夹

时间:2018-09-22 12:15:40

标签: java maven javafx maven-resources-plugin

默认情况下,Maven基于Standard Directory Layout检查资源文件夹。尽管最终的jar存在问题。

enter image description here

它最终将所有资源添加到src / main文件夹之外,这使我的JavaFX应用程序陷入困境。

Caused by: java.lang.NullPointerException: Input stream must not be null
        at javafx.graphics/javafx.scene.image.Image.validateInputStream(Unknown Source)
        at javafx.graphics/javafx.scene.image.Image.<init>(Unknown Source)
        at main.java.com.goxr3plus.xr3player.application.tools.InfoTool.getImageFromResourcesFolder(InfoTool.java:734)
        at main.java.com.goxr3plus.xr3player.application.Main.start(Main.java:324)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
        ... 1 more

因为我正在从src / main / resources文件夹中加载图像,如:

class.getResourceAsStream("/main/resources/image/"+ imageName));

在最后一个jar中,images文件夹不在main文件夹下。我曾经将资源文件夹放在src文件夹之外,而且一切似乎还不错,尽管我想遵循标准目录布局,所以我将其移动了。在一切正常之前,请使用:

class.getResourceAsStream("/image/"+ imageName));

这是当前的目录布局:

enter image description here


您的建议是什么?我应该以不同的方式加载图像吗? ....

class.getResourceAsStream("/main/resources/image/"+ imageName));

仅适用于该代码

能以某种方式告诉Maven如何在最终jar上打包资源文件夹吗?


在多次重新启动并清理了项目和Maven Update Project之后……似乎是与Eclipse有关的问题……没关系,我会在这里留下这个问题,因为它将来可能对某人有用:)

1 个答案:

答案 0 :(得分:1)

您的jar文件看起来像预期的标准布局。

如果您有src/main/resources/image/imageName.png,它将显示在jar文件的/image/imageName.png中(在屏幕快照中,您确实拥有该目录,因此看起来不错)。

您可以使用class.getResourceAsStream("/image/imageName.png")加载它。