2

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

在传统/基于 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 时包含嵌入式资源

4

1 回答 1

2

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

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

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

首先右键单击项目的根节点并选择“新建/文件夹”

项目文件夹

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

选项

选择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"));
    }

}
于 2021-09-24T00:15:34.057 回答