最终 jar 中 src/main 下的 Maven 包资源文件夹
Maven package resources folder under src/main in final jar
默认情况下,Maven 根据 Standard Directory Layout 检查资源文件夹。虽然最后的jar有问题。
它最终添加了 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(Unknown Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait(Unknown Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater(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(Unknown Source)
... 1 more
因为我正在从 src/main/resources 文件夹加载图像,例如:
class.getResourceAsStream("/main/resources/image/"+ imageName));
并且在最终的 jar 中,图像文件夹不在主文件夹下。我曾经在 src
文件夹之外有资源文件夹,一切似乎都很好,但我想遵循标准目录布局,所以我移动了它。在一切正常之前使用:
class.getResourceAsStream("/image/"+ imageName));
这是当前的目录布局:
你有什么建议?我应该以不同的方式加载图像吗? ....
现在只有该代码有效 class.getResourceAsStream("/main/resources/image/"+ imageName));
能否以某种方式告诉 Maven 如何将资源文件夹打包到最终的 jar 上?
经过多次重新启动并清理项目和 Maven 更新项目...这似乎是与 Eclipse 相关的问题...没关系,我会把这个问题留在这里,因为它可能对将来的人有用:)
您的 jar 文件看起来像预期的标准布局。
如果你有 src/main/resources/image/imageName.png
,它会显示在 jar 文件的 /image/imageName.png
中(在你的屏幕截图中,你确实有那个目录,所以看起来不错)。
你可以用class.getResourceAsStream("/image/imageName.png")
加载它。
默认情况下,Maven 根据 Standard Directory Layout 检查资源文件夹。虽然最后的jar有问题。
它最终添加了 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(Unknown Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait(Unknown Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater(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(Unknown Source)
... 1 more
因为我正在从 src/main/resources 文件夹加载图像,例如:
class.getResourceAsStream("/main/resources/image/"+ imageName));
并且在最终的 jar 中,图像文件夹不在主文件夹下。我曾经在 src
文件夹之外有资源文件夹,一切似乎都很好,但我想遵循标准目录布局,所以我移动了它。在一切正常之前使用:
class.getResourceAsStream("/image/"+ imageName));
这是当前的目录布局:
你有什么建议?我应该以不同的方式加载图像吗? ....
现在只有该代码有效 class.getResourceAsStream("/main/resources/image/"+ imageName));
能否以某种方式告诉 Maven 如何将资源文件夹打包到最终的 jar 上?
经过多次重新启动并清理项目和 Maven 更新项目...这似乎是与 Eclipse 相关的问题...没关系,我会把这个问题留在这里,因为它可能对将来的人有用:)
您的 jar 文件看起来像预期的标准布局。
如果你有 src/main/resources/image/imageName.png
,它会显示在 jar 文件的 /image/imageName.png
中(在你的屏幕截图中,你确实有那个目录,所以看起来不错)。
你可以用class.getResourceAsStream("/image/imageName.png")
加载它。