2009-02-16 9 views
6

Chcę skompilować wiele plików Java w mojej aplikacji bez restartowania Weblogic i Tomcat. W przeciwnym razie zajmuje to dużo czasu. Do tego dostałem jeden Hotswap plugin in Eclipse, ale to nie działa we wszystkich przypadkach. Mówi, że działa w przypadku kompilacji pojedynczego pliku. Nawet jeśli użyję tego, to nie działa we wszystkich przypadkach.Jak skompilować pojedyncze/wiele plików Java bez restartu serwera? Czy istnieje jakaś wtyczka Eclipse dla tego samego?

Czy jest jakiś inny sposób, w jaki mogę to zrobić, czy jest tam jakaś inna wtyczka/skrypt/oprogramowanie, które może mi w tym pomóc?

Jeśli są jakieś otwarte źródła, będzie to bardzo pomocne.

Dzięki z góry.

Odpowiedz

7

Jedną z rzeczy jest kompilacja klas, ale potrzebna jest również maszyna wirtualna JAVA do ponownego załadowania klas i użycia ich, co jest nazywane wymianą na gorąco. Aby uzyskać najlepsze dostępne hot-zamianie klas, potrzebujesz czegoś takiego jak javarebel. To pozwala na ładowanie od nowa o wiele więcej niż w zwykłej maszynie JVM SUN. Jeśli uruchomisz swoje wdrożenie w trybie rozłożonym, będziesz wolny od domu i będziesz mógł przetestować każdą zmianę kodu w ciągu sekundy. Bazujemy na testach, więc używam tylko javarebel w tej krótkiej fazie, kiedy montuję całą aplikację, ale działa to naprawdę dobrze.

+0

Dzięki. Myślę, że Java Rebel wydaje się być dobra. Muszę to przetestować. Jedyne, co mnie martwi, to nie jest freeware/Open Source. Czy znasz coś, co jest freeware/OpenSource? Jeśli twoja odpowiedź brzmi "Nie", jak dobrze jest sobie pozwolić na Java Rebel? – Techmaddy

+0

Nie ma innych * rzeczywistych * alternatyw dla bieżącego jdk. Javarebel działa dobrze dla mnie, ale to już prawie osobne pytanie. To nie jest drogie i tak, to jest tego warte. – krosenvold

1

Nie znam Eclipse, ale używam Netbeans. Netbeans robi to całkiem nieźle. Najnowsza wersja ma nawet opcję automatycznego przekompilowania po zapisaniu pliku Java.

Wiem, że to nie odpowiada dokładnie na twoje pytanie. Prawdopodobnie możesz używać zarówno Netbeans, jak i Eclipse, w zależności od części projektu, nad którą pracujesz.

EDYTOWANIE: Dzięki Tomcat można ponownie załadować aplikację internetową. Jest to przydatne tylko wtedy, gdy Tomcat patrzy na nową klasę. Jeśli twój projekt zostanie najpierw skompilowany do katalogu kompilacji, a następnie zostanie utworzona WAR, możesz wejść do Tomcat i zainstalować aplikację internetową, zamiast wskazywać punkt WAR w katalogu kompilacji.

W Tomcat może być konieczne umieszczenie pliku konfiguracyjnego witryny pod tomcat/conf/Catalina/localhost. Zawartość tego pliku wygląda następująco:

<?xml version="1.0" encoding="UTF-8"?> 
<Context docBase="C:/Projects/MyWebApp/build/web" path="/MyWebApp"/> 

Instrukcja przeładunku tutaj: http://www.cs.ucl.ac.uk/teaching/java/tomcatfaq.html#changeservlet

Jeśli kilka razy to zrobić chociaż Tomcat zabraknie pamięci. Dzieje się tak z powodu czegoś, co nazywa się PermGenSpace. Przeczytaj o tym, jeśli chcesz dowiedzieć się więcej. Rozwiązaniem jest zwiększenie pamięci JVM, PermGenSize (z -XX: MaxPermSize) i wreszcie restartowanie Tomcata sporadycznie.

EDIT2: Jeśli ponowne załadowanie aplikacji spowoduje wylogowanie, możesz łatwo uzyskać kontener w celu przekształcenia danych sesji na dysk przez dodanie "narzędzi Serializable" do niektórych klas. Wtedy nie musisz logować się po ponownym załadowaniu aplikacji.

+0

Nie mogę przełączyć na Netbeans. Byłoby świetnie, gdyby to można było zrobić w Eclipse. – Techmaddy

0

Chyba nie wiem, gdzie jest problem. Oto, co robię i zmiany ładują się niemal natychmiast. Mam skrypt Ant, który kompiluje pliki .java i .jsp dla mnie, umieszcza je w odpowiednich katalogach pod webappami iw razie potrzeby zmienia plik web.xml (lub przynajmniej dotyka go, aby powiadomić tomcat o zmianach). Jeśli potrzebujesz pomocy przy robieniu tego z Antem, chętnie pomogę. Nie używam plików WAR do wdrożenia na moim komputerze testowym. Wydaje mi się, że będzie to dużo wolniej.

1

Zgadzam się, że bardzo męczące jest ponowne rozmieszczanie przez cały czas podczas opracowywania.

Proponuję zajrzeć do MyEclipse, który ma bardzo dobry mechanizm hotdeploy, który działa dobrze z Tomcat, a który jest dość przystępny i ma 30-dniową wersję próbną.

Mechanizm Java EE w Eclipse do ponownego instalowania na serwerach nie jest tak szybki.

2

Java HotSpot VM robi to automatycznie, ale nie we wszystkich przypadkach ...

Po pierwsze, musi być uruchomiony sesję "debug", a nie w sesji "RUN".

Następnie niektóre zmiany wymuszą ponowne uruchomienie. Podstawową ideą jest to, że jeśli interfejs do zmiany klasy (metoda sigs, a nie rzeczywisty interfejs Java), VM nie może zastąpić zawartości klasy w linii.

Nie powinieneś potrzebować wtyczki do tego, tylko niedawna-VH.

Dzieje się tak w kilku przypadkach jak

  • metody dodawania
  • metody usuwania
  • zmiany metody podpisy
  • zmieniające hierarchię klas (superklas zaimplementowane interfejsy)

Może zdarza się również, jeśli wprowadzisz błąd do klasy. (W przypadku błędów, takich jak niedopasowane nawiasy klamrowe)

Po zapisaniu pliku Java, Eclipse je kompiluje. Jeśli wystąpi błąd, program Eclipse wstawia rzut wyjątku, aby wskazać, że wystąpił nierozwiązany błąd kompilacji. (Robi to tak po uruchomieniu nie tylko zobaczyć ostatnią udaną kompilację, co oczywiste, masz błąd kompilatora)

+0

Ten uratował mnie, wydaje się, że wystarczy uruchomić Tomcat w trybie debugowania. +1 –

Powiązane problemy