自动模块 未命名模块 java_java - ServiceLoader :: load与命名模块的未命名模块交互 - 堆栈内存溢出...

我有一个这样的项目:

\---main

\---src

\---com.foo

\---UnnamedStart.java

\---api

\---src

\---com.foo.api

\---ApiInterface.java

\---module-info.java

\---impl

\---src

\---com.foo.impl

\---ApiInterfaceImpl.java

\---module-info.java

UnnamedStart.java实现是:

public static void main(String[] args) {

ServiceLoader services = ServiceLoader.load(ApiInterface.class);

...

}

请注意, main是未命名的模块。

api/src/module-info.java是:

module com.foo.api {

exports com.foo.api;

}

和impl/src/module-info.java是:

更新1.1 - 下面更新的代码见评论,添加requires

更新1.2 - 下面的代码更新, provides A with B更改provides B with A在创建问题时provides B with A错误,原来是好的

module com.foo.impl {

requires com.foo.api; //added (update 1.1)

provides com.foo.impl.ApiInterface

with com.foo.api.ApiInterfaceImpl; //vice versa (update 1.2)

}

当我在UnnamedStart.java运行我的代码时,我最终没有services元素。

我还尝试在com.foo.api.ApiInterface创建一个静态方法:

static List getInstances() {

ServiceLoader services = ServiceLoader.load(ApiInterface.class);

List list = new ArrayList<>();

services.iterator().forEachRemaining(list::add);

return list;

}

并在api/src/module-info.java添加行uses com.foo.api.ApiInterface; 但它给出了相同的结果(没有)。

我使其工作的唯一方法是将main从unnamed迁移到named模块。

1.当未命名模块尝试与命名模块交互时, java 9如何工作?

2.是否有可能使其工作并保持主要像未命名的模块?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值