Java 11. javac /警告:--add-reads选项中的[options]模块名称未找到:moduleB

问题描述 投票:0回答:1

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

moduleBMyService.java

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

module-info.java

module moduleB {}

moduleAmodule-info.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?

java java-11 java-module module-info
1个回答
0
投票

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

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

module moduleB {
     exports com.company.packageB;
}

然后另一个模块moduleA应该要求模块B-

module moduleA {
     requires moduleB;
}
© www.soinside.com 2019 - 2024. All rights reserved.