如何读取 buildSrc 模块资源文件夹中的属性文件?

How to read properties file in resources folder of buildSrc module?

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

  1. 在项目根目录下(这种情况时好时坏,找比较靠谱的案例)
  2. inside直接buildSrc文件夹
  3. 现在尝试将 inside“常规”资源文件夹 inside buildSrc 甚至 ide 突出显示为公认的资源文件夹

但是在组装模块期间,我在 load()

行中遇到找不到异常文件

所以 2 个问题:

  1. 属性文件应位于何处
  2. 如何从 kotlin inside buildSrc 模块读取它。

Gradle 有一个有点复杂的 class-loading 层次结构,我对它的了解还不够多,无法解释幕后发生的事情。不过,我可以给你一些提示。

首先,方法 getResourcegetResourceAsStream 存在于 Class 和 ClassLoader 中,它们的行为不同。

在Class上,如果你没有在它前面加上斜杠,它会寻找相对于class包的资源。使用斜杠,它查看层次结构的根。由于您不知道 Gradle 完成的已编译脚本的包,因此引用该文件的正确方法是 javaClass.getResourceAsStream("/file.properties")(注意斜杠)。

如果您改用 ClassLoader 中的方法,则前导斜杠没有意义。所以在这里,Thread.currentThread().contextClassLoader.getResource("file.properties"))是正确的。

最后要考虑的是何时可以使用 class 中的方法以及何时必须使用 ClassLoader。据我所知,您可以在同一项目(或插件)中使用 class 方法。所以这应该在 buildSrc 中工作。但是如果你想获取buildSrc之外的资源,我相信你需要通过context classloader.

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