Gradle 如何读取buildSrc模块的resources文件夹中的属性文件?

Gradle 如何读取buildSrc模块的resources文件夹中的属性文件?,gradle,gradle-kotlin-dsl,Gradle,Gradle Kotlin Dsl,我需要读取位于buildSrc特殊模块的resources文件夹中的属性文件,以创建其他项目模块可以访问的kotlin对象。 我试图把这个属性文件 在根项目文件夹中(这种情况有时有效,有时无效,因此我寻找更可靠的情况) 直接在buildSrc文件夹中 现在尝试将“常规”资源文件夹放在buildSrc中,ide甚至将其突出显示为可识别的资源文件夹 但是在组装模块的过程中,我在load()行中没有找到异常文件 因此,有两个问题: 属性文件应位于何处 如何从buildSrc模块内的kotlin读取它

我需要读取位于buildSrc特殊模块的resources文件夹中的属性文件,以创建其他项目模块可以访问的kotlin对象。 我试图把这个属性文件

  • 在根项目文件夹中(这种情况有时有效,有时无效,因此我寻找更可靠的情况)
  • 直接在buildSrc文件夹中
  • 现在尝试将“常规”资源文件夹放在buildSrc中,ide甚至将其突出显示为可识别的资源文件夹
  • 但是在组装模块的过程中,我在load()行中没有找到异常文件

    因此,有两个问题:

  • 属性文件应位于何处
  • 如何从buildSrc模块内的kotlin读取它

  • Gradle有一个复杂的类加载层次结构,我对它了解得不够,无法解释引擎盖下发生了什么。不过,我可以给你一些提示

    首先,方法
    getResource
    getresourceastream
    在类和类加载器中都存在,它们的行为不同

    在一个类上,如果不在其前面加斜杠,它将查找与该类的包相关的资源。用斜线表示层次结构的根。由于您不知道Gradle编写的编译脚本的包,因此引用该文件的正确方法是
    javaClass.getResourceAsStream(“/file.properties”)
    (注意斜杠)

    如果使用类加载器中的方法,则前导斜杠没有意义。所以这里,
    Thread.currentThread().contextClassLoader.getResource(“file.properties”)
    是正确的


    最后要考虑的是,当您可以使用类中的方法和何时使用类加载器时。据我所知,在同一个项目(或插件)中可以使用class方法。因此,这应该在buildSrc中起作用。但是,如果您想在buildSrc之外获取资源,我相信您需要使用上下文类加载器。

    在尝试了不同的变体之后,我发现了100%稳定且有效的变体-而不是读取属性文件、解析它并验证输入-只需使用kotlin对象作为随时可用的配置!使用这种方法,当前文件夹和资源可访问性的问题消失了,这正是我所需要的。

    经过深思熟虑后,我发现使用kotlin文件而不是属性文件是一种更干净的使用方式,这通过消除“外部”资源中的需要来解决加载“外部”资源的问题:)