资源文件到目前为止,直到非模块化Java中,你会简单地把一个文件src/main/java/resources
确保它是在类路径中,然后从几乎与的Java 9个拼图 - 访问来自外部模块
file = getClass().getClassLoader().getResourceAsStream("myfilename");
加载在类路径的任何地方。
现在使用模块,情节变厚。
我的项目设置如下:
module playground.api {
requires java.base;
requires java.logging;
requires framework.core;
}
配置文件放在里面src/main/resources/config.yml
。
项目与
java -p target/classes:target/dependency -m framework.core/com.framework.Main
运行,因为主类不驻留在我自己的项目,但外部框架模块,它不能看到config.yml
。现在的问题是,有没有办法以某种方式将我的配置文件放入模块或打开它?我必须改变上游框架加载文件的方式吗?
我试过在模块信息中使用“输出”或“打开”,但它想要一个包名称,而不是文件夹名称。
如何以最实用的方式实现这一目标,以便它能像Java 8一样工作,并尽可能地进行少许更改?
是否'com.framework.Main'读取使用'Class.getResource'资源? – nullpointer
如果模块中的代码需要访问自己的某个资源,则应该使用Class.getResourceXXX方法(参数名称是资源名称,而不是文件名称btw)。如果资源位于另一个模块中,并且具有Module对象,则可以使用Module.getResourceAsStream。如果您想搜索模块路径和类路径,那么ClassLoader.getResourceXXX将像以前一样工作,但模块需要打开包含该资源的包。最顶层目录或META-INF/*中的资源没有被封装,所以ClassLoader.getResource将会工作。 –
相关[如何让一个自动模块找到它自己的资源在java-9](https://stackoverflow.com/questions/43573809/how-to-let-an-自动模块找到它自己的资源在java-9) – nullpointer