IntelliJ&Gradle:测试模块/ sourceSet无法看到主要资源

时间:2019-09-13 11:25:52

标签: java gradle intellij-idea

这是我项目中每个模块的简化结构:

src
|- main
  |- java
    <My classes>
  |- resources
    config.properties
|- test
  |- java
    MainTest
  |- resources

我最近将IntelliJ更新为版本2019.2。当Jetbrains删除了“取消选中每个源集创建单独的模块”(请参阅​​this post)时,当我导入Gradle项目时,我最终得到了一个包含两个子模块的模块:main和{{1 }}。

所以,在Intellij项目结构中,我有这个:

主要子模块

main module structure

测试子模块

test module structure

在某些课程中,我以这种方式加载test文件:

config.properties

但是当我在IntelliJ中运行InputStream inputStream = MyClass.class.getClassLoader().getResourceAsStream("config.properties"); 时,有时会调用上面的代码,结果InputStream为空。

我猜想MainTest.main()模块的类路径不包含test资源文件夹...

我该如何解决?

当我可以选中“取消选中每个源集创建单独的模块”框时,我只有一个模块,只有一个类路径,我的生活就更轻松了。 是否有办法(可能在main文件中使用Gradle配置)来强制执行一个唯一的模块/源集?

1 个答案:

答案 0 :(得分:1)

IntelliJ 2019.2默认将所有构建和运行任务委托给Gradle,因此在IntelliJ中构建项目的结构无关紧要。您也可以尝试使用gradle test在命令行上运行测试,以查看是否遇到相同的问题(应该这样做)。

“测试”运行时类路径确实包括“ test”和“ main”文件夹中的资源文件夹。因此,这也不应该成为问题。

在显示的主要模块的屏幕快照中,资源文件夹中没有config.properties文件。您是否将其放在META-INF子文件夹中?如果它实际上位于资源文件夹的根目录中,请尝试在路径中用斜杠(/)引用它,例如:

MyClass.class.getClassLoader().getResourceAsStream("/config.properties")
                                                   ^^^