ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 从外部模块访问资源文件

2019-09-19 06:00:19  阅读:204  来源: 互联网

标签:java java-9 jigsaw


到目前为止,非模块化的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指定模块路径,该选项将查找目标/类和模块的目标/依赖项.
>同时,使用-m alternate for –module指定要使用名称framework.core解析的初始模块,并使用主类构造模块图,以明确地将其列为com.framework.Main.

现在,这里的问题似乎是模块framework.core不需要或读取playground.api模块,因为模块图不包含由实际资源config.yml组成的所需模块.

作为suggested by @Alan,在启动期间列出模块分辨率输出的一种好方法是使用–show-module-resolution选项.

I just naively tried to opens src/main/resources, doesn’t compile ofc

由于模块中的资源位于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

标签:java,java-9,jigsaw
来源: https://codeday.me/bug/20190919/1812188.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有