Вопрос по java-ee, java, jar, build, classpath – Настройка пути компоновки Java или папка WEB-INF / lib [дубликаты]

7

На этот вопрос уже есть ответ здесь:

Как добавить библиотеки JAR в проект WAR, не сталкиваясь с java.lang.ClassNotFoundException? Classpath vs Build Path vs / WEB-INF / lib 4 ответа

Я видел много обучающих программ и приложений, которые помещают свои jar-файлы в путь сборки, в то время как другие помещают его в свою папку web-inf / lib. Есть ли существенная разница? Каковы плюсы и минусы обоих? Что является индикатором для меня, чтобы поместить определенный jar в папку libs и поместить jar в путь сборки?

Ваш Ответ

2   ответа
12

что он будет упакован как файл WAR и развернут на сервере.

Если вы используете IDE, например eclipse, и экспортируете проект в виде файла WAR, он автоматически возьмет jar-файлы в папке lib и упакует их вместе с WAR-файлом, что сделает их доступными для приложения, работающего на сервере (jars под WEB-INF / lib включены в путь к классам приложения).

Если вы просто поместите их куда-нибудь еще и включите их в путь сборки, то при экспорте проекта вы должны объявить, что вы хотите, чтобы файлы jar также были включены в путь сборки.

В принципе, нет большой разницы, но если вы знаете, что вам нужен этот jar во время выполнения (т.е. после развертывания приложения на сервере), лучше поместить его в папку WEB-INF / lib.

не могли бы вы предоставить какую-то документацию для этого? Jewels
1

построить путь? Большинство используемых вами JAR-файлов должны быть доступны во время сборки (компиляции), потому что ваш код зависит от них, иначе он не скомпилируется.

Настоящий вопрос заключается в том, чтобы поместить JAR вWEB-INF/lib против вашего контейнера/lib каталог. В общем, вы всегда должны помещать свои JAR-файлы в приложение вWEB-INF/lib, Размещение их в глобальном масштабе имеет несколько последствий:

синглтоны теперь глобальны для всех веб-приложений (один загрузчик классов), если развернуто несколько

легче ввести утечку памяти, если библиотека содержит ссылку на любой из ваших классов (см. выше)

вы не дублируете одни и те же классы (каждое веб-приложение будет повторно использовать один и тот же класс, а не иметь отдельную копию в каждом загрузчике классов

Похожие вопросы