如何读取 buildSrc 模块资源文件夹中的属性文件?
How to read properties file in resources folder of buildSrc module?
我需要读取位于 buildSrc 特殊模块的 inside 资源文件夹中的属性文件来创建其他项目模块可以访问的 kotlin 对象。
我试着把这个属性文件
- 在项目根目录下(这种情况时好时坏,找比较靠谱的案例)
- inside直接buildSrc文件夹
- 现在尝试将 inside“常规”资源文件夹 inside buildSrc 甚至 ide 突出显示为公认的资源文件夹
但是在组装模块期间,我在 load()
行中遇到找不到异常文件
所以 2 个问题:
- 属性文件应位于何处
- 如何从 kotlin inside buildSrc 模块读取它。
Gradle 有一个有点复杂的 class-loading 层次结构,我对它的了解还不够多,无法解释幕后发生的事情。不过,我可以给你一些提示。
首先,方法 getResource
和 getResourceAsStream
存在于 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 对象作为随时可用的配置!通过这种方法,当前文件夹和资源可访问性的问题消失了,这正是我所需要的。
我需要读取位于 buildSrc 特殊模块的 inside 资源文件夹中的属性文件来创建其他项目模块可以访问的 kotlin 对象。 我试着把这个属性文件
- 在项目根目录下(这种情况时好时坏,找比较靠谱的案例)
- inside直接buildSrc文件夹
- 现在尝试将 inside“常规”资源文件夹 inside buildSrc 甚至 ide 突出显示为公认的资源文件夹
但是在组装模块期间,我在 load()
行中遇到找不到异常文件所以 2 个问题:
- 属性文件应位于何处
- 如何从 kotlin inside buildSrc 模块读取它。
Gradle 有一个有点复杂的 class-loading 层次结构,我对它的了解还不够多,无法解释幕后发生的事情。不过,我可以给你一些提示。
首先,方法 getResource
和 getResourceAsStream
存在于 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 对象作为随时可用的配置!通过这种方法,当前文件夹和资源可访问性的问题消失了,这正是我所需要的。