【问题标题】:IntelliJ & Gradle : test module/sourceSet can't see main resourcesIntelliJ & Gradle:测试模块/sourceSet 看不到主要资源
【发布时间】:2019-09-13 11:25:52
【问题描述】:

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

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

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

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

主子模块

测试子模块

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

InputStream inputStream = MyClass.class.getClassLoader().getResourceAsStream("config.properties");

但是当我在 IntelliJ 中运行 MainTest.main() 时,它有时会调用上面的代码,结果 InputStream 为空。

我猜test 模块类路径不包括main 资源文件夹...

我该如何解决这个问题?

当我可以选中“取消选中为每个源集创建单独的模块”框时,我只有一个模块和一个类路径,我的生活变得更轻松了...... 有没有办法,也许使用 build.gradle 文件中的 Gradle 配置来强制执行一个唯一的模块/源集?

【问题讨论】:

    标签: java gradle intellij-idea


    【解决方案1】:

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

    “test”运行时类路径确实包含“test”和“main”文件夹中的资源文件夹。所以这也不应该是个问题。

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

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

    【讨论】:

    • config.properties 位于src/main/resources 文件夹中。只有 IntelliJ 模块结构视图只显示文件夹。命令行和斜杠的行为相同。
    猜你喜欢
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2016-08-28
    相关资源
    最近更新 更多