Привет, я новичок в модулях. Я читаю замечательную книгу @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;
}
Это выглядит следующим образом.
Я могу скомпилировать его следующим образом.
C:\Ocp11>javac -d out --module-source-path src --module John
Успешно, и он создает правильный каталог в out
И я могу запустить его без проблем.
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)
Это выглядит нравится. Во-первых,
Спасибо @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
Спасибо.