Java Jigsaw заставляет неназванный модуль потреблять экспортированный пакет, не работающий - PullRequest
0 голосов
/ 25 апреля 2020

Привет, я новичок в модулях. Я читаю замечательную книгу @Nicolai Parlog о модульной системе java, а также делаю несколько простых кодировок самостоятельно.

У меня есть воспроизводимый пример, который легко gr asp.

У меня есть такой простой класс.

package university.harvard;

public class Pilot{
    public static void main(final String args[]){
        System.out.println("My Kid JOHN Stephen Ortiz Rondon: "+java.util.Arrays.toString(args));
    }
}

С модулем-info. java вот так.

module John{
    exports university.harvard;
}

Это выглядит следующим образом.

Source package

Я могу скомпилировать его следующим образом.

C:\Ocp11>javac -d out --module-source-path src --module John

Успешно, и он создает правильный каталог в out

Compiled package

И я могу запустить его без проблем.

C:\Ocp11>java -p out -m John/university.harvard.Pilot

Позже я создаю java файл, подобный этому.

package unnamedmodule;

public class CallingModule extends university.harvard.Pilot{
    public CallingModule(){
        System.out.println("COnstructor nice");
    } 
    public static void main(final String args[]){
        System.out.println("ClassInside A UNNAMEDModule"+java.util.Arrays.toString(args));
    }
}

Как вы можете видеть, это очень простой класс, который здесь расширяется

extends university.harvard.Pilot{

Это класс в экспортированном пакете в John module.

Пока я понимаю, что автоматический c -модуль и unamedmodule могут получать доступ к экспортированным пакетам. Укажите меня, если я ошибаюсь, пожалуйста.

* 1 044 * Позже я попробую эту команду.
C:\Ocp11>javac -d out -p out src/CallingModule.java

И я получаю.

src\CallingModule.java:3: error: package university.harvard is not visible
public class CallingModule extends university.harvard.Pilot{                                             
^
(package university.harvard is declared in module John, which is not in the module graph)

Но я устанавливаю --module-path, который, я думаю, компилятор распознает, но не может разрешить доступ? Я знаю, что это просто, но для меня это очень важно. Как будто модуль не разрешает доступ к экспортированному пакету в модуле.

Если установить флаг в -classpath, он работает, но я хочу обработать Джона как модуль.

Рабочий код рассматривая все как путь к классам

C:\Ocp11>javac -d out -cp out/John src/CallingModule.java

Я указываю на неправильный подход? Как я могу использовать / потреблять экспортированный пакет из неназванного модуля.

Спасибо и извините мой бедный engli sh.

Я использую

java 14 2020-03-17
Java(TM) SE Runtime Environment (build 14+36-1461)
Java HotSpot(TM) 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)

Это выглядит нравится. Во-первых,

Start

Спасибо @JohannesKuhn, мой код работает сейчас, мне не хватает флага

--add-modules

Теперь мой Команды выглядят следующим образом.

Компиляция

C:\Ocp11>javac -p out --add-modules John -d out src/CallingModule.java

Запуск

C:\Ocp11>java -cp out -p out --add-modules John unnamedmodule.CallingModule

Спасибо.

...