2012-12-03 8 views
5

Widziałem wiele samouczków i aplikacji, które umieszczają swoje słoiki w ścieżce budowania, podczas gdy inne umieszczają je w folderze web-inf/lib. Czy są jakieś znaczące różnice ? Jakie są plusy i minusy obu? Co to jest wskaźnik dla mnie, aby umieścić pewien słoik wewnątrz folderu libs i umieścić słoik w ścieżce budowania?Java Konfigurowanie ścieżek kompilacji lub folderu WEB-INF/lib

Odpowiedz

8

Aplikacja z folderem WEB-INF to aplikacja internetowa. Oznacza to, że zostanie spakowany jako plik WAR i wdrożony na serwerze.

Jeśli korzystasz z IDE jak zaćmienie, a wyeksportujesz projekt jako plik WAR, automatycznie wykona on słoiki pod folderem lib i zapakuje je wraz z WAR, co spowoduje ich udostępnienie dla aplikacji uruchomionej serwer (słoiki pod WEB-INF/lib są zawarte w ścieżce classpath aplikacji).

Jeśli umieścisz je nigdzie indziej i dodasz do ścieżki kompilacji, podczas eksportowania projektu musisz zadeklarować, że chcesz, aby słoiki w ścieżce kompilacji również zostały uwzględnione.

Zasadniczo nie ma dużej różnicy, ale jeśli wiesz, że potrzebujesz tego słoika w czasie wykonywania (tj. Po wdrożeniu aplikacji na serwerze), lepiej umieścić go w folderze WEB-INF/lib.

+0

Czy mógłbyś podać w tym celu jakąś dokumentację? – Jewels

1

Co masz na myśli pod nazwą ścieżka kompilacji? Większość używanych przez ciebie JAR musi być dostępna podczas budowania (kompilacji), ponieważ twój kod zależy od nich - w przeciwnym razie nie będzie się kompilował.

Prawdziwe pytanie dotyczy umieszczenia plików JAR w katalogu WEB-INF/lib w stosunku do katalogu kontenera /lib. Generalnie powinieneś zawsze umieszczać swoje JAR-y w aplikacji pod numerem WEB-INF/lib. Umieszczając je globalnie ma kilka konsekwencji:

  • singletons obecnie globalny dla wszystkich aplikacji internetowych (załadunek jedna klasa) czy stwardnienie rozmieszczonego

  • łatwiej wprowadzić przeciek pamięci, jeśli biblioteka posiada odniesienie do dowolnego twoje klasy (patrz wyżej)

  • nie powielać tych samych klas (każda aplikacja internetowa będzie ponownie wykorzystać tę samą klasę, w przeciwieństwie do posiadania odrębnej kopię w każdej ładowarki klasy

Powiązane problemy