module-info.java无法导出仅含非类文件的包,编译报错求解决方案
解决办法
Java模块系统的exports指令本质是用来对外暴露包中的类或接口,纯资源文件的包不会被判定为“有效可导出包”,因此会触发编译报错。以下是几个可行的解决方案:
方案1:将资源文件合并到已有可导出包
把纯资源文件放到一个已经通过exports指令对外暴露的包目录下,其他模块可以通过Module.getResourceAsStream()或者类加载器直接读取这些资源,无需额外导出新包。方案2:给纯资源包添加占位类
在这个包下创建一个无实际业务逻辑的空类(比如DummyMarker.java)或者package-info.java注释文件,让模块系统识别该包为有效包,之后就能正常使用exports指令导出。
示例占位类:package com.your.resource.package; public class DummyMarker {}对应的module-info配置:
exports com.your.resource.package;方案3:不导出包,直接通过模块API访问资源
如果其他模块仅需要读取资源,无需导出包,可直接通过模块系统API定位资源。比如你的模块名为my.module,资源路径是com/your/resource/package/config.json,其他模块可以这样读取:try (InputStream is = ModuleLayer.boot() .findModule("my.module") .map(module -> module.getResourceAsStream("com/your/resource/package/config.json")) .orElseThrow(() -> new IOException("资源未找到"))) { // 读取资源逻辑 }
内容的提问来源于stack exchange,提问作者Felipe
相关产品推荐
相关产品推荐

