Несколько точек входа (основные классы) внутри верхнего уровня банки - PullRequest
0 голосов
/ 03 апреля 2020

Стоит отметить, что я использую maven в качестве инструмента управления сборкой. У меня есть банка (назовем его dep.jar), который будет включен в окончательный проект (final.jar) в качестве зависимости. dep.jar имеет класс с методом main. Мне нужно иметь несколько точек входа (классов с основными методами) в каталоге верхнего уровня моего final.jar, чтобы я мог использовать точку входа в зависимости от моих потребностей. Включая один из dep.jar.

Я рассмотрел:

  1. Изменение файла META-INF/MANIFEST.MF в банке. Как указано Oracle, невозможно ссылаться на основные классы внутри зависимостей jar (каталог BOOT-INF/lib) -> https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html;
  2. Uber jar - не вариант, я зависим внутри структуры каталогов jar Java кодовая база
  3. Использование специального загрузчика классов, подобного этому http://www.jdotsoft.com/JarClassLoader.php. Но это подразумевает изменение основного метода final.jar, который я не могу сделать из-за ограничений проекта.
  4. Использование maven-dependency-plugin, но он может распаковать внутренний jar (dep.jar) и скопировать классы в рабочий каталог maven target которые на этапе упаковки будут упакованы в каталог BOOT-INF/classes. Опять же, я не могу ссылаться на основные классы оттуда. Если я распакую и скопирую их куда-то, отличное от target - скопированные классы не появятся в моем final.jar

Есть ли какой-либо другой плагин или опция, как добавить классы из final.jar зависимых jar dep.jar во время сборки JAR до верхнего уровня final.jar?

РЕДАКТИРОВАТЬ: final.jar проект выглядит следующим образом:

final.jar
    |_______BOOT-INF
              |_______lib
              |         |_______dep.jar (contains main class I want to invoke)
              |_______classes
                         |__________dir (directory I want to copy on demand with help of CLI)

1 Ответ

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

Я нашел решение здесь Spring Boot - Как указать альтернативный стартовый класс? (Несколько точек входа) . Закончилось использованием свойства -Dloader.main при запуске jar. Командная строка выглядит следующим образом: java -jar -Dloader.main=<main_class> ./final.jar

...