Wdróż alternatywne rozwiązania dla JRebel [zamknięte]

190

JRebel pozwala na ponowne wdrożenie nowo skompilowanego kodu bez ponownego uruchamiania aplikacji. Zastanawiam się, czy jest jakaś alternatywa (za darmo?). Strona FAQ odpowiada na to pytanie, ale jestem pewien, że jest tendencyjny w stosunku do JRebel. To pytanie zostało zadane rok temu na tej stronie, ale przywracam je, aby sprawdzić, czy ktoś ma jakieś nowe informacje.

Na marginesie, naprawdę lubię JRebel, ale jeśli istnieje darmowa alternatywa, jestem gotów spróbować.

Jedna dodatkowa uwaga: pracuję nad projektem typu open source i oferują bezpłatne roczne licencje dla osób, które mogą udowodnić, że biorą udział w projekcie typu open source. Co działa świetnie dla mnie (www.kuali.org), ale nie będę na tym projekcie na zawsze.

Sójka
źródło
53
Dobre pytanie. Szukaliśmy również alternatywy dla JRebel, ponieważ ich dział sprzedaży jest wyjątkowo inwazyjny. Nie mamy problemów z płaceniem za produkt taki jak JRebel, ale nie wtedy, gdy nękają naszych programistów i dział IT 24/7.
neu242,
4
Istnieje alternatywa dla jRebel autorstwa własnego ZeroTurnAround: darmowa wersja Jrebela do projektów typu open source i studium przypadku ... my.jrebel.com
dellasavia
2
Wiem, że jest późna odpowiedź, możesz rzucić okiem na Spring Loaded - który jest agentem JVM do przeładowywania zmian plików klas podczas działania JVM. Przekształca klasy w czasie ładowania, aby umożliwić ich późniejsze przeładowanie. W przeciwieństwie do „zastępowania kodu”, który zezwala na proste zmiany tylko po uruchomieniu maszyny JVM (np. Zmiany w ciałach metod), Spring Loaded pozwala dodawać / modyfikować / usuwać metody / pola / konstruktory i więcej ...
Simple-Solution
Debuger Eclipse - natychmiast zastępuje kod na żywo.
user1050755,
Spróbuj opublikować to na siostrzanej stronie, Software Rekomendacje Stack Exchange .
Basil Bourque,

Odpowiedzi:

97

Spójrz na DCEVM , to modyfikacja maszyny wirtualnej HotSpot, która pozwala na nieograniczoną redefinicję klas w czasie wykonywania. Możesz dodawać / usuwać pola i metody oraz zmieniać super typy klas w czasie wykonywania. Funkcje DCEVM mogą zostać zintegrowane z przyszłą aktualizacją Java jako część JEP 159 .

Pliki binarne dostępne na oryginalnej stronie są ograniczone do Java 6u25 i do wczesnych wersji Java 7. Projekt został rozwidlony na Github i obsługuje najnowsze wersje Java 7 i 8. Opiekun zapewnia pliki binarne dla maszyn wirtualnych 32/64 bitów w systemie Windows / Linux Począwszy od wersji Java 11 projekt został przeniesiony do nowego repozytorium GitHub, a teraz zapewnia także pliki binarne dla systemu OS X.

DCEVM jest spakowany dla Debiana i Ubuntu, jest wygodnie zintegrowany z OpenJDK i można go wywoływać java -dcevm. Nazwa pakietu zależy od wersji domyślnego JDK:

Emmanuel Bourg
źródło
5
Działa dobrze, uważam, że jest szybszy i zajmuje mniej pamięci niż JRebel. Jedynym ograniczeniem jest trzymanie się Java 6u25.
Emmanuel Bourg
3
Dziękuję Ci bardzo. Zrujnowałem cały dzień, starając się, aby jRebel działał zgodnie z oczekiwaniami. DCEVM przybył na ratunek.
alehro,
4
Oto pełne instrukcje kompilacji i instalacji DCEVM na JDK 7u45 i MacOSX: neu242.livejournal.com/52962.html
neu242
1
JEP 159 nie jest częścią JDK 8. Być może został on przełożony na JDK 9, ale nie ma jeszcze potwierdzenia.
KrishPrabakar
5
Znaleziono kilka pełnych plików binarnych JVM 1.7 tutaj: dcevm.nentjes.com, więc nie ma potrzeby łatania JVM. Wypróbowałem wersję Win64 i działała ona dla mnie świetnie. Napisałem też o tym tutaj na blogu, jeśli potrzebujesz więcej informacji: javainformed.blogspot.com/2014/01/jrebel-free-alternative.html
dnang
42

Hotswap Agent to rozszerzenie DCEVM, które obsługuje wiele środowisk Java (przeładuj definicję bean wiosennych, mapowanie encji Hibernacja, konfiguracja poziomu rejestratora, ...).

Istnieje również wiele dokumentacji, jak skonfigurować DCEVM i skompilowane pliki binarne dla Java 1.7.

mądry
źródło
5
Mają teraz dedykowaną stronę internetową: hotswapagent.org . Projekt jest całkiem nowy, ale wydaje się, że działa całkiem dobrze.
Didier L
Wykonałem ten samouczek, aby zintegrować go z zaćmieniem po jego zainstalowaniu: tirthalpatel.blogspot.fr/2014/06/... to działa jak urok
jpprade
@edudant Czy po zainstalowaniu agenta „Hotswap” musimy zainstalować DCEVM? Ponieważ zainstalowałem DCEVM, używając „sudo apt install openjdk-11-jre-dcevm” w Ubuntu 19.04, a także wtyczki w IntelliJ Ultimate 2019.1.3. Jeśli instalujesz „agenta Hotswap”, nie mówiąc już o wykonywaniu zadań JRebel, jakie jest zastosowanie DCEVM!
20

Na wiosnę chłopaki, używane do przeładowywania Grails, ale działa również z Javą:

https://github.com/SpringSource/spring-loaded

Ramon
źródło
3
Nie chcę narzekać, ale sprężynowy nie obsługuje przeładowywania zależności.
lbednaszyński
O ile pamiętam, istnieją właściwości systemowe, które można ustawić, aby powiedzieć mu, jakie pakiety mają zostać przeładowane. Ma inne ograniczenia i prawdopodobnie wolałbym w każdym razie korzystać z DCEVM.
Ramon
1
„jakie paczki do ponownego załadowania” - poprawne. Problem wskazany przez @lbednaszyńskiego polega na tym, że nie przeładuje on zależnych plików JAR. Jest to niezbędne w przypadku projektów wielomodułowych Maven.
Marcel Stör
Ten projekt na razie jest na poddaszu!
jpmottin
9

Pracowałem nad projektem open source, który pozwala na gorące zastępowanie klas ponad to, na co pozwala hot swap: https://github.com/fakereplace/fakereplace

To może, ale nie musi, działać, ale każda opinia jest mile widziana

Stuart Douglas
źródło
4

Możesz rzucić okiem na to:

Obsługa HotSwap: obiektowa architektura Java HotSpot VM umożliwia zaawansowane funkcje, takie jak redefinicja klasy „w locie” lub „HotSwap”. Ta funkcja umożliwia zastąpienie zmodyfikowanego kodu w uruchomionej aplikacji za pośrednictwem interfejsów API debuggera. HotSwap dodaje funkcjonalność do architektury Java Debugger Platform, umożliwiając aktualizację klasy podczas wykonywania pod kontrolą debuggera . Pozwala także na wykonywanie operacji profilowania poprzez hotswapping w wersjach metod, do których wstawiono kod profilujący.

W tej chwili pozwala to tylko na ponowne wdrożenie nowo skompilowanej treści metody bez ponownego uruchamiania aplikacji. Wszystko, co musisz zrobić, to uruchomić go za pomocą debugera. Próbowałem w Eclipse i działa świetnie.

Ponadto, jak wspomniał Emmanuel Bourg w swojej odpowiedzi ( JEP 159 ), istnieje nadzieja na poparcie dodawania supertypów oraz dodawania i usuwania metod i pól.

Odniesienie: Oficjalny dokument Java 135217: Niezawodność, dostępność i łatwość serwisowania

Alex
źródło
-3

JRebel jest bezpłatny. Nie kupuj tego Wybierz opcję „bezpłatny” (przycisk opcji) na stronie „kup”. Następnie wybierz „Społecznościowe”. Po rejestracji otrzymasz w pełni funkcjonalny klucz licencyjny JRebel. Następnie możesz pobrać JRebel lub użyć klucza we wbudowanej wersji IDE. Haczyk (tak, jest haczyk), musisz pozwolić im publikować w Twoim imieniu (reklamować) raz w miesiącu na osi czasu FB lub na Twitterze. Dałem im moje konto na Twitterze, bez biggie, nigdy go nie używam i nikt, kogo znam, tak naprawdę go nie używa. Zaoszczędź 260 $.

Michael Andrews
źródło
14
Jest jeszcze jeden haczyk. JRebel Social jest bezpłatny tylko do użytku niekomercyjnego. Tak, oczywiście, nie sprawdzimy, czy faktycznie używasz go do osobistego projektu lub w pracy, ale audytorzy mogą go nie lubić, jeśli zauważą, że niewłaściwie używasz oprogramowania.
Anton Arhipov,
2
Nigdy nie sugerowałbym inaczej. W rzeczywistości - jedynym powodem, dla którego o tym wspominam, jest to, że nie ma już licencji „indywidualnej”. Udało mi się zmusić moją firmę do zapłaty za licencję na pracę. Płaciłem także za osobistą licencję na własny użytek przez ponad 3 lata. Ale kiedy cena na północ od 260 USD rocznie, stało się to niepraktyczne. To najlepsze rozwiązanie dla mnie (i innych), ale nadal płaciłbym za to, gdyby cena była rozsądna.
Michael Andrews
42
Frustrujące jest także to, że każdego roku muszę kupować oprogramowanie, które już kupiłem. Żadna inna firma tego nie robi. Zwykle oprogramowanie kupuje się raz. Jeśli zdecydujesz się na aktualizację - wtedy kupisz ją ponownie za pełną cenę (a może cenę aktualizacji, w zależności od firmy). Ale to, za co płacisz, to NOWE funkcje - a nie te same funkcje, za które już zapłaciłeś. To tak, jakby Apple lub Microsoft wyłączało komputer co roku, dopóki nie zapłacisz ponownie za system operacyjny. Jedzenie do namysłu.
Michael Andrews,
2
JRebel Social został zastąpiony myJRebel. Jest bezpłatny do użytku niekomercyjnego, wystarczy zezwolić na udostępnianie statystyk: my.jrebel.com
Steve Swinsburg
1
Podsumowując, JRebel jest stosunkowo tani jak na licencję na oprogramowanie dla programistów.
Jared Hooper