如何在Java9模块中使用资源

如何在Java9模块中使用资源,java,gradle,java-9,java-module,Java,Gradle,Java 9,Java Module,我使用gradle和 对于junit测试,我试图作为资源访问一些文件,但是classLoader.getResource(filename)无法找到该文件 通常,您将文件放在src/test/resources/foo.txt中,并以/foo.txt的形式访问它,但在Java9中,情况似乎发生了变化,资源也发生了变化(类似于类) 我必须将gradle的资源文件放在哪里才能正确打包 在测试之后访问该文件的正确方法是什么 我忘记读的文档是什么?:) 更准确地说,我设置了一个小的。 使用git克隆h

我使用gradle和

对于junit测试,我试图作为资源访问一些文件,但是
classLoader.getResource(filename)
无法找到该文件

通常,您将文件放在
src/test/resources/foo.txt
中,并以
/foo.txt
的形式访问它,但在Java9中,情况似乎发生了变化,资源也发生了变化(类似于类)

我必须将gradle的资源文件放在哪里才能正确打包

在测试之后访问该文件的正确方法是什么

我忘记读的文档是什么?:)


更准确地说,我设置了一个小的。 使用
git克隆https://github.com/michas2/java_9_resource_test.git
并在切换到该目录后执行
渐变构建。(我使用的是Gradle4.6,但这应该不是问题所在。)

结构如下所示:

.
├── build.gradle
└── src
    ├── main
    │   └── java
    │       ├── module-info.java
    │       └── resourceTest
    │           └── Main.java
    └── test
        ├── java
        │   └── resourceTest
        │       └── MainTest.java
        └── resources
            └── resourceTest
                └── test.txt

我尝试使用
this.getClass().getResource(“/resourceTest/test.txt”)
访问资源,不幸的是,这会返回
null

这似乎是一个渐变错误

当我使用
-I
选项运行Gradle时,我看到它为运行程序而执行的实际命令包括:

--patch-module resourceTest=/home/vgr/src/java_9_resource_test/build/classes/java/test
如您所见,它包括
build/classes
目录,但不包括
build/resources
目录

由于构建将类和资源放在不同的位置,因此无法使用
--patch module
。类和资源必须放在一起,在一个文件树或一个.jar文件中


这是org.gradle.java.experimental-jigsaw插件中的一个缺陷,还是gradle本身,我不确定。

以同样的方式对它们进行打包(除了资源确实应该放在类似目录的包中-
com/example/myapplication/foo.txt,而不是
/foo.txt
)。使用,而不是ClassLoader.getResource。我确实尝试过,但没有成功。我不是Gradle专家,但我怀疑您想将src/test/resources移到src/main/resources。(请注意,编写这个.getClass().getResource(“/resourceTest/test.txt”)的较短方法是
this.getClass().getResource(“test.txt”)
)这些只是测试所需的资源,所以将它们放在main中没有意义。我还尝试了使用斜杠和包名的所有不同变体,但没有成功。请随意使用我上面的存储库测试任何想法。啊,对了,没关系。我把Main和MainTest混淆了。您正在构建一个.jar文件并从中运行吗?