JPMS服务加载器不符合我的预期。
我正在尝试提供一个作为可执行 jar 的桌面程序使用默认服务,单个用户可能会超载。用户提供自己的服务类,并在命令行上将其名称作为参数给出。
The service:
package eu.ngong.myService;
public interface MyService {
public String name();
public void doSomething();
}
The program与默认服务(中的第一行if和for插入用于记录):
package eu.ngong.myService;
import java.util.ServiceLoader;
public class ServiceUser implements MyService {
private static MyService myService = new ServiceUser();
public static void main(String[] args) {
if (args.length > 0) {
System.out.println("trying to load " + args[0] + " envirionment.");
ServiceLoader<MyService> myServices = ServiceLoader.load(MyService.class);
for (MyService ms : myServices) {
System.out.println(ms.name());
if (ms.name().equalsIgnoreCase(args[0])) {
myService = ms;
}
}
}
myService.doSomething();
}
@Override
public void doSomething() {
System.out.println("The default service is acting.");
}
@Override
public String name() {
return "Default";
}
}
两者均收集于myService.jar托管 module-info.java 的 ServiceUser 主类
module MyService {
exports eu.ngong.myService;
provides eu.ngong.myService.MyService with eu.ngong.myService.ServiceUser;
}
An 单独的罐子在用户处可能是
package eu.ngong.user1;
import eu.ngong.myService.MyService;
public class User1 implements MyService {
@Override
public String name() {
return "User1";
}
@Override
public void doSomething() {
System.out.println("User1 is acting.");
}
}
使用 module-info.java
module User1 {
requires MyService;
provides eu.ngong.myService.MyService with eu.ngong.user1.User1;
}
然而,running该程序与
java -p ..\user1\user1.jar;myService.jar -jar myService.jar User1
仅导致意外 output
trying to load User1 environment.
The default service is acting.
While I expected带日志记录
trying to load User1 environment.
Default
User1
User1 is acting.
我错过了什么?