Как встроить rt.jar в мою WAR, используя maven - PullRequest
1 голос
/ 05 октября 2011

Как я могу встроить одну из библиотек JRE (скажем, rt.jar ) в мою WAR, используя Maven?

Существует ли плагин / команда maven для этого?

Ответы [ 3 ]

6 голосов
/ 05 октября 2011

Помещение файла rt.jar в ваш файл WAR не заставит его использовать Java.Загрузчик классов веб-контейнера всегда должен пытаться загрузить системный загрузчик классов перед просмотром JAR-файлов в вашем веб-приложении, а системный загрузчик классов будет использовать rt.jar в загрузочном пути к классам;то есть тот, который находится в каталоге установки JRE.

Это также хорошо.Если среда выполнения Java использовала ваш rt.jar, это может привести к ужасному беспорядку.Код в rt.jar может пытаться вызывать собственные методы, которые не реализованы в исполняемом файле Java, или он может выполнять вызовы внутренних методов, поведение и / или сигнатуры которых изменились несовместимым образом.


Если вы планируете сделать это, чтобы «исправить» какое-то поведение в библиотеке классов, мой совет:

  1. Не делайте этого ... вместо этого попробуйте найти обходной путь.
  2. Если вам нужно это сделать, сделайте это, проверив исходники OpenJDK, исправив «ошибку», собрав новый JDK / JRE и используя , что в качестве вашей JRE.
4 голосов
/ 05 октября 2011

Не думаю, что это хорошая идея.rt.jar является частью вашей JRE и лучше ее хранить отдельно.

2 голосов
/ 05 октября 2011

Как уже указывалось adarshr выше , не очень хорошая идея предоставлять свои собственные банки JRE.

На всякий случай, если вам нужно добавить какой-нибудь другой jar-файл, которого вы не найдете в репозиториях maven, вы можете добавить загруженные jar-файлы, выполнив следующие действия:

  1. Put rt.jar в локальном репозитории maven, например

    mvn install: install-file -Dfile = myjar.jar -DgroupId = some.group -DartifactId = someartifact Dversion = 1.0 -Dpackaging = jar

  2. Поместите зависимость для этого файла rt.jar в pom.xml

    <dependency> <groupId>some.group</groupId> <artifactId>someartifact</artifactId> <version>1.0</version> <scope>runtime</scope> </dependency>

  3. При создании артефакта someartifact.jar будетбыть включенным в него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...