【问题标题】:Can not load resource from package无法从包中加载资源
【发布时间】:2018-12-06 20:04:25
【问题描述】:

我有一个问题,看起来非常基本和简单,但我无法解决,即使我在互联网上进行了调查。由于我相信我跑到了一个角落并且无法找到我的出路,所以我将在这里陈述我的非常简单的问题。

假设:一个 JDK 11 项目包含一个名为 LoadResource 的模块。

项目结构

src
└── main
    ├── java
    │   ├── module-info.java
    │   └── com
    │       └── example
    │           └── LoadResource.java
    └── resources
        └── com
            └── example
                └── Foo.txt

模块信息.java

module {
  exports example.com;
}

LoadResource.java

package com.example;

public class LoadResource {
    public static void main(String... args) {
        new LoadResource().run();
    }

    private void run() {
        System.out.println("TEST");

        final var resource = getClass().getResource("Foo.txt");
        System.out.println(resource);
    }
}

如果我运行这个getClass().getResource("Foo.text"); 会返回null

我知道这是一个非常基本的问题,但是:为什么会这样?对我来说,这看起来是一个相当简单的编程任务。我在这里想念什么?

【问题讨论】:

  • /com/example/Foo.txt。资源文件夹是类路径中的根目录
  • @HenningLuther 这也不起作用。
  • 您的资源文件夹在类路径中吗?想好了吗?
  • 你能告诉我们输出目录吗?如果 Foo.txt 与 LoadResource.class 位于同一目录中,那么将在创建 JAR 文件时找到它,因为它们将位于同一“目录”中。否则,它看起来像是一个 IDE 或环境问题,其中 Foo.txt 未复制到正确的位置。

标签: java java-module java-11 java-platform-module-system


【解决方案1】:

我可以通过在 IntelliJ 中添加 --patch-module LoadResource=build/resources/main 作为 VM args 来解决我的问题。

【讨论】:

  • final var resource = getClass().getResource("com/example/Foo.txt"); 怎么样?
  • 如果 --patch-module 选项有效,则表明资源已被复制到 build/resources/main 中,因此它们与类文件不在同一棵树中 - 这应该报告给无论您使用什么 IDE,因为它必须将它们处理到错误的位置。
猜你喜欢
  • 2014-04-15
  • 1970-01-01
  • 2012-07-26
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
相关资源
最近更新 更多