Java 11. javac / warning: имя модуля [options] в опции --add-reads не найдено: moduleB - PullRequest
1 голос
/ 29 апреля 2020

У меня небольшой java 11 модульный проект, который состоит из двух модулей moduleA и модулей.

moduleB MyService. java

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

Информация о модуле. java

module moduleB {}

moduleA Информация о модуле. 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

Как мне скомпилировать модуль A с опциями --add-export и --add-reads?

1 Ответ

0 голосов
/ 29 апреля 2020

Вы должны экспортировать пакет, прежде чем пытаться использовать классы из него в другом модуле.

Итак, сначала moduleB должен экспортировать пакет как:

module moduleB {
     exports com.company.packageB;
}

, а затем для другого модуля moduleA должен потребоваться модуль B -

module moduleA {
     requires moduleB;
}
...