Netbeans (12x)/Maven 包含并加载嵌入式资源?

Netbeans (12x)/Maven include and load embedded resources?

简单的问题,使用 Netbeans 12x 时如何从基于 Maven 的项目中包含和加载嵌入式资源

在基于 traditional/Ant 的项目中,可以简单地将嵌入式资源放置在 Source Package 中并使用 Class#getResource 加载它,但由于某些原因,基于 Maven 的项目不会以同样的方式工作。

以下代码在使用 Ant 时有效,但在使用 Maven 时失败:

import java.io.IOException;
import javax.imageio.ImageIO;

public class Main {

    public static void main(String[] args) throws IOException {
        new Main();
    }

    public Main() throws IOException {
        ImageIO.read(getClass().getResource("/images/Background.jpg"));
    }

}

所以,简单的问题是,在将 Maven 与 Netbeans 12x 结合使用时如何包含嵌入式资源

Maven 对于源文件和“其他资源”的存储位置有自己的要求。与 Ant 不同,您不能简单地将“资源”放入 src/main/java 目录,而是需要将它们添加到 src/main/resources 目录。

然而,出于某种原因,Netbeans 似乎没有为您创建这个目录(至少对于我使用的基本“应用程序”模板没有)。

在这种情况下,您需要自己创建。您可以从命令行或文件管理器执行此手册,但 Netbeans 也允许您创建。

首先右键单击项目的根节点并select“New/Folder”

在对话框中,将文件夹命名为 resources,然后点击“浏览”按钮(在“父文件夹”旁边)

Select src/main 目录

点击完成,一个新的“节点”应该出现在名为“其他来源”的项目中

现在,我希望我可以说向该目录添加资源很容易,但我最终只是使用文件管理器将文件直接复制并粘贴到该目录。

包含资源后(它们应该显示在“其他来源”节点下),您可以从代码中引用它们。

不过要记住的重要一点是,您不需要在路径中包含 resources,因为目录的内容被复制到生成的产品中,而不是目录本身。

因此,布局为:

以下代码将毫无问题地加载图像:

import java.io.IOException;
import javax.imageio.ImageIO;

public class Main {

    public static void main(String[] args) throws IOException {
        new Main();
    }

    public Main() throws IOException {
        ImageIO.read(getClass().getResource("/images/Background.png"));
    }

}