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-modulesjava.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