Java 11.javac/警告 : [options] module name in --add-reads option not found: moduleB

标签 java java-11 java-module module-info

我有一个小型的java 11模块项目,它由两个模块moduleA和modules组成。

模块B MyService.java

package com.company.packageB;
public class MyService {
    public String getHelloWorld(){
        return "Hello world!";
    }
}

模块信息.java

module moduleB {}

模块A 模块信息.java

module moduleA {}

Main.java

package com.company.packageA;   
import com.company.packageB.MyService;
    public class Main {
        public static void main(String[] args) {
            MyService myService = new MyService();
            String s = myService.getHelloWorld();
            System.out.println(s);
        }
    }

我想运行这个项目。 我用这个命令编译 moduleB

javac -d out/moduleB $(find ./moduleB -name "*.java")

然后我想编译 moduleA,

javac -p out/moduleB --add-reads moduleA=moduleB --add-exports moduleB/com.company.packageB=moduleA  -d out/moduleA   $(find ./moduleA -name "*.java")

但我遇到了这个问题:

warning: module name in --add-reads option not found: moduleB
warning: [options] module name in --add-exports option not found: moduleB
./moduleA/src/com/company/packageA/Main.java:3: error: package com.company.packageB does not exist
import com.company.packageB.MyService;
                           ^
./moduleA/src/com/company/packageA/Main.java:7: error: cannot find symbol
        MyService myService = new MyService();
        ^
  symbol:   class MyService
  location: class Main

如何使用 --add-export 和 --add-reads 选项编译 moduleA?

最佳答案

您应该先导出包,然后再尝试在另一个模块中使用包中的类。

因此,首先 moduleB 应该将包导出为:

module moduleB {
     exports com.company.packageB;
}

然后另一个模块moduleA应该需要moduleB -

module moduleA {
     requires moduleB;
}

关于Java 11.javac/警告 : [options] module name in --add-reads option not found: moduleB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61501954/

相关文章:

java - 在j2me lwuit中,使用主题组合框下拉,其他组件将隐藏

java - Android OpenCV HoughLinesP 崩溃

java - 如何在 Java 中直接接受成员变量的值?

java - 在 Java 11 上运行 Spring Boot "Hello World"?

java - 如何在运行时扩展模块路径

java - Guava - 缓存一张表并在该缓存上使用 get 方法

java - 从 Java 8 迁移到 Java 11。在运行时,是否可以从 Java 8 中编译的库中的类文件访问 JDK 内部 API?

Java 超接口(interface)运行时差异 Java 8 与 Java 9

java - 修复 java.lang.module.ResolutionException : two modules export the same package to another module in a non-modular app

java - 模块已被弃用并标记为删除