java – 从外部模块访问资源文件
到目前为止,非模块化的
java,你只需将文件放在src / main / java / resources中,确保它在classpath中,然后加载它
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.现在的问题是,有没有办法以某种方式将我的配置文件放入模块或打开它?我是否必须更改框架上游加载文件的方式? 我尝试在module-info中使用“exports”或“opens”,但它想要一个包名,而不是文件夹名. 如何以最佳实用的方式实现这一点,以便它可以像Java 8一样工作,并尽可能少地进行更改? 解决方法
在使用
java 命令启动应用程序时,如下所示: –
java -p target/classes:target/dependency -m framework.core/com.framework.Main >您使用-p aternate选项为–module-path指定模块路径,该选项将查找目标/类和模块的目标/依赖项. 现在,这里的问题似乎是模块framework.core不需要或读取playground.api模块,因为模块图不包含由实际资源config.yml组成的所需模块. 作为suggested by @Alan,在启动期间列出模块分辨率输出的一种好方法是使用–show-module-resolution选项.
由于模块中的资源位于root level,因此它是not encapsulated,不需要打开或导出到任何其他模块. 在您的情况下,您只需要确保模块playground.api最终在模块图中,然后应用程序可以访问该资源.要指定除初始模块之外要解析的根模块,可以使用–add-modules选项. 因此,为您工作的整体解决方案以及一些调试应该是: java --module-path target/classes:target/dependency --module framework.core/com.framework.Main --add-modules playground.api --show-module-resolution (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |