在 java 9 中从模块类调用非模块类

use*_*311 5 java java-9 java-module

我试图从模块类调用非模块类。我创建了一个文件夹结构

moduledemo > allclasses > moduleC > packageC > MyMethods.class
Run Code Online (Sandbox Code Playgroud)

是我的模块类文件的路径

moduledemo > moduleC > packageC > MyMethods.java 
Run Code Online (Sandbox Code Playgroud)

moduledemo > nomodule > packageD > DemoNoModule.class
Run Code Online (Sandbox Code Playgroud)

是我调用的无模块类MyMethods.java

我能够编译 DemoNoModule 文件。我能够将 MyMethods.java 编译到 allclasses 文件夹中moduleC

当我运行 MyMethods 时,出现错误moduleC not found。有人可以更新吗?我正在使用以下命令来运行

java --module-path allclasses -m moduleC/packageC.MyMethods
Run Code Online (Sandbox Code Playgroud)

两个文件代码 -> 非模块类

package packageD;

public class DemoNoModule {
    public void showD() {
        System.out.println("this is show of D in No Module");
    }
}
Run Code Online (Sandbox Code Playgroud)

模块类调用类

package packageC;
import packageD.*;

public class MyMethods {
    public static void main(String s[]) {
        DemoNoModule d=new DemoNoModule();
        d.showD();
    }
}
Run Code Online (Sandbox Code Playgroud)

模块C中的模块信息

module moduleC {    
    exports packageC; 
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

zla*_*kad 0

Java 9 程序应该是模块化的。这就是我对 JDK-9 中 jigsaw 的理解。因此,恕我直言,您必须将 packageD '包装' 到另一个模块中以及 moduleC write 的 module-info 中requires moduleD。还moduleD应该导出packageD。 ALL-UNNAMED添加是为了向后兼容,我想它会在 Java 发展的某个时刻被删除。