2011-01-19 24 views
15

Chciałbym spakować moje klasy internetowe Java EE6 do słoika i umieścić je w katalogu /WEB-INF/lib/ wraz z innymi słojami użytkowymi i porzucić katalog /WEB-INF/classes/ całkowicie./WEB-INF/classes vs/WEB-INF/lib

Czy są jakieś istotne różnice między tymi dwoma pod względem klasowania, kontekstu aplikacji, itp.?

Dzięki.

PS: Za każdym razem, gdy przechodzę do dowolnej specyfikacji języka Java, zawsze przekierowuję mnie do indeksu dokumentacji Oracle, który jest kilkanaście kliknięć od oryginalnego adresu URL. Czy ktoś wie, co się tam dzieje?

Odpowiedz

19

Poszedłbym na /WEB-INF/classes. Pozwala uruchamiać aplikację w trybie debugowania i w klasach wymiany podczas zmiany. Jeśli zapiszesz wszystko jako słoik, będziesz musiał przepakować i ponownie wdrożyć aplikację za każdym razem, gdy zmienisz klasę.

+0

dzięki. Ale, oprócz debugowania, czy będzie to funkcjonalnie ta sama aplikacja? – Osw

+1

tak. Bez różnicy – Bozho

14

No, krótko: Wyobraź sobie, że masz klasę org.example.Test.class, jeśli umieścić je w słoiku i WEB-INF/lib/ katalogu i skopiować tę samą klasę w WEB-INF/classes/ następnie classloader tego wniosku będzie wykorzystywał ostatni (od WEB-INF/classes/).

Czasem można go używać jako zaletę - mam bibliotekę i ma ona błąd ... Szukam źródła tej klasy (gdzie jest błąd, brakuje mi części, skąd wiem, że ten błąd jest w tym klasa, to już inna historia), dodaję tę klasę do projektu ze stałym kodem i jest ona kompilowana do WEB-INF/classes/, podczas gdy biblioteka nadal istnieje w WEB-INF/lib/. Naprawiona klasa będzie używana, dopóki biblioteka nie zostanie naprawiona.

+0

Dzięki temu funkcja ta może być pomocna. – Osw

+0

Pomocna wskazówka, dzięki! – aglassman

0

W definicji kontenera serwletu Tomcat: WEB-INF\classes jest wyszukiwany przed WEB-INF\lib. Możesz przekazać ładowanie klas do niestandardowego programu ładującego klasy - nawet wtedy, gdy powyższe zamówienie zostanie zachowane.

Jeśli zdecydujesz się na innego dostawcę, np. JBOss, Glassfish, Jetty może mieć inną kolejność, ale nie jestem tego pewien.