Я играю с модулями, но есть кое-что, что я не могу выполнить до сих пор, но факт довольно прост, но не работает.
У меня есть модуль с именем Student и только 1 пакет, который экспортирует и требует класс в немодульном фляге - что-то вроде этого.
Соответствующий код здесь состоит в том, что класс Administracion требует класс в немодульном jar код выглядит следующим образом.
public class Administracion extends classpath.ClassPathClass{
В этом примере я считаю, что у меня нет исходников, только двоичные файлы в файле Jar, на самом деле jar находится на root следующего в sr c но в каталоге out
Примерно так:
Я могу скомпилировать весь код модуля с помощью этой команды
C:\Ocp11>javac -d out --module-source-path src -p out --module Student
Отлично, двоичные файлы расположены в каталоге out, и теперь это выглядит так:
Я могу запустить его с помощью этой команды:
C:\Ocp11>java -p out --module Student/university.upel.Administracion
И работает как шарм, но шаг, который я не смог выполнить, я pac kage it.
Я хотел бы проигнорировать папку модуля root. Я имею в виду, что учащийся может облегчить управление основным классом.
Я хотел бы иметь структуру в банке вот так.
Я пробовал это:
C:\Ocp11>jar --create --file App.jar -e university.upel.Administracion -C out/Student .
Это создает JAR-файл, и если я его распаковываю, я вижу то, что хотел .
The Jar file ClassPath.jar
The module-info.class for creating this as a module
The Main-Class: university.upel.Administracion
Структура пакета:
На самом деле, если я вижу module-info.class с использованием Javap, я вижу это
C:\Ocp11>javap App/module-info.class
Compiled from "module-info.java"
module Student {
requires java.base;
requires ClassPath;
exports university.upel;
}
В настоящее время я думаю, что хорошо, кажется, работает. Выполнение:
C:\Ocp11>java -p App.jar -m Student
Error occurred during initialization of boot layer
java.lang.module.FindException: Module ClassPath not found, required by Student
Это говорит о том, что модуль ClassPath модуля automati c отсутствует, даже когда ClassPath.jar находится внутри банки. Я думаю, что это невозможно, верно? Я застрял в этот момент.
Я просто подумал, что таким образом Студент будет модулем с автоматическим c модулем внутри, который будет определять местоположение автоматического c модуля при каждом запуске.
Я уверен, что я ошибаюсь или я использую неправильный подход.
Если я немного изменю команду, то обнаружу Jar и запустится без проблем.
C:\Ocp11>java -p App.jar;out/ClassPath.jar -m Student
OUTPUT
Так я не могу положить JAR внутрь JAR и запустить его? Это раздражает перенос файла с 2 банками, даже когда только эта баночка использует модуль Automati c.