这是我项目中每个模块的简化结构:
src
|- main
|- java
<My classes>
|- resources
config.properties
|- test
|- java
MainTest
|- resources
我最近将IntelliJ更新为版本2019.2。当Jetbrains删除了“取消选中每个源集创建单独的模块”(请参阅this post)时,当我导入Gradle项目时,我最终得到了一个包含两个子模块的模块:main
和{{1 }}。
所以,在Intellij项目结构中,我有这个:
主要子模块
测试子模块
在某些课程中,我以这种方式加载test
文件:
config.properties
但是当我在IntelliJ中运行InputStream inputStream = MyClass.class.getClassLoader().getResourceAsStream("config.properties");
时,有时会调用上面的代码,结果InputStream为空。
我猜想MainTest.main()
模块的类路径不包含test
资源文件夹...
我该如何解决?
当我可以选中“取消选中每个源集创建单独的模块”框时,我只有一个模块,只有一个类路径,我的生活就更轻松了。
是否有办法(可能在main
文件中使用Gradle配置)来强制执行一个唯一的模块/源集?
答案 0 :(得分:1)
IntelliJ 2019.2默认将所有构建和运行任务委托给Gradle,因此在IntelliJ中构建项目的结构无关紧要。您也可以尝试使用gradle test
在命令行上运行测试,以查看是否遇到相同的问题(应该这样做)。
“测试”运行时类路径确实包括“ test”和“ main”文件夹中的资源文件夹。因此,这也不应该成为问题。
在显示的主要模块的屏幕快照中,资源文件夹中没有config.properties文件。您是否将其放在META-INF子文件夹中?如果它实际上位于资源文件夹的根目录中,请尝试在路径中用斜杠(/)引用它,例如:
MyClass.class.getClassLoader().getResourceAsStream("/config.properties")
^^^