Java17如何运行这段JAVA8的代码?

问题描述:
今天遇到了一段代码java8执行没问题,但是把jdk切换成17时出现了包找不到的问题,推测与Java的模块化有关,但是尝试了许久并未解决。

Java8代码:

import com.sun.jndi.rmi.registry.ReferenceWrapper;

import javax.naming.NamingException;

import javax.naming.Reference;

import java.rmi.AlreadyBoundException;

import java.rmi.RemoteException;

import java.rmi.registry.LocateRegistry;

import java.rmi.registry.Registry;

public class RMIServer {

public static void main(String[] args) {

try {

// 本地主机上的远程对象注册表Registry的实例,默认端口1099

LocateRegistry.createRegistry(1099);

Registry registry = LocateRegistry.getRegistry();

System.out.println("Create RMI registry on port 1099");

//返回的Java对象

Reference reference = new Reference("EvilCode","EvilCode",null);

ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);

// 把远程对象注册到RMI注册服务器上,并命名为evil

registry.bind("evil",referenceWrapper);

} catch (RemoteException | AlreadyBoundException | NamingException e) {

e.printStackTrace();

}

}

}


回答:

jdk9开始分模块了,模块中内容如果要用,需要配置module-info.java。

但也可以通过--add-modules和--add-exports来解决。

--add-modules

java.naming,java.rmi,jdk.naming.rmi

--add-exports

jdk.naming.rmi/com.sun.jndi.rmi.registry=ALL-UNNAMED

第一个图配置是为了能编译,第二个图添加jvm选项是为了运行时能用这几个类。

以上是 Java17如何运行这段JAVA8的代码? 的全部内容, 来源链接: utcz.com/p/944102.html

回到顶部