【问题标题】:getResource() is returning null with Gradle projectgetResource() 在 Gradle 项目中返回 null
【发布时间】:2016-06-22 01:23:18
【问题描述】:

我知道还有其他几个关于此的问题...

但我的问题似乎有点不同,因为我似乎拥有所有必要的东西来解决这个问题。

代码:

 this.getClass().getResource("checkstyle_whitespace.xml"); // null

问题是我已经通过检查调试器中的类加载器来验证我的类路径。这是我所看到的:

 27 = {URL@1235} "file:/Users/dennis/Documents/Development/java/java-grader/build/classes/main/"
 28 = {URL@1236} "file:/Users/dennis/Documents/Development/java/java-grader/build/resources/main/"

Blow 是我的目录结构的快速tree。请参阅 build/resourcessrc/main/resources。 gradle 构建我的项目时正在复制文件。

├── build
│   ├── classes
│   │   ├── main
│   │   │   └── javaGrader
│   │   └── test
│   │       └── javaGraderTest
│   └── resources
│       └── main
│           ├── checkstyle_whitespace.xml
│           └── grammars
├── src
│   ├── main
│   │   ├── java
│   │   │   └── javaGrader
│   │   └── resources
│   │       ├── checkstyle_whitespace.xml
│   │       └── grammars
│   └── test
│       ├── java
│       │   └── javaGraderTest
│       └── resources
│           └── mini_test
├── target
│   ├── classes
│   ├── generated-sources
│   │   └── annotations
│   └── generated-test-sources
│       └── test-annotations
└── test_assets

据我了解,这些文件应该可以访问,因为它们位于 build 中。如果我错了,请纠正我...

【问题讨论】:

    标签: java gradle resources classpath


    【解决方案1】:

    如果您将不以/ 开头的资源路径传递给Class.getResource(),则类加载器会在类的包中查找资源。不在根部。你的代码应该是

    this.getClass().getResource("/checkstyle_whitespace.xml")
    

    this.getClass().getClassLoader().getResource("checkstyle_whitespace.xml")
    

    【讨论】:

    • 我正在使用ClassLoader.getSystemResourceAsStream("/Configuration.json")。它正在工作,但在刷新项目后,它开始返回 null。
    • getClass().getClassLoader().getResource("FXMLDocument.fxml") 和 getClass().getClassLoader().getResourceAsStream("Picture.png") 两种方法都有效,但如果您使用的是 gradle然后确保将这些文件(图像和 xml 文件)放在资源文件夹中。否则你可能仍然会得到空指针
    • 这可行,但checkstyle_whitespace.xml 应放在/resources 文件夹中。
    【解决方案2】:

    在项目主文件夹中存在 java 文件夹的同一位置创建一个名为“resources”的文件夹。并将所有图像和其他资源定位到“资源”文件夹中。得到这样的人

    new ImageIcon(getClass().getClassLoader().getResource("image.png"));
    

    【讨论】:

      猜你喜欢
      • 2010-10-12
      • 2014-07-14
      • 2012-07-10
      • 2015-07-04
      • 2021-12-15
      • 2014-12-07
      • 1970-01-01
      相关资源
      最近更新 更多