Redéployer des alternatives à JRebel [fermé]

190

JRebel permet de redéployer le code nouvellement compilé sans redémarrer l'application. Je me demande s'il existe une alternative (gratuite?). La page FAQ répond à cette question, mais je suis sûr qu'elle est biaisée en faveur de JRebel. Cette question a été posée il y a un an sur ce site, mais je la ramène pour voir si quelqu'un a de nouvelles informations.

En passant, j'aime beaucoup JRebel, mais s'il y a une alternative gratuite, je suis prêt à l'essayer.

Une note supplémentaire, je travaille sur un projet open source, et ils offrent des licences gratuites d'un an aux personnes qui peuvent prouver qu'elles sont sur un projet open source. Ce qui fonctionne très bien pour moi (www.kuali.org), mais je ne serai pas sur ce projet pour toujours.

Geai
la source
53
Bonne question. Nous recherchons également une alternative à JRebel, car leur service commercial est extrêmement invasif. Nous n'avons aucun problème à payer pour un produit comme JRebel, mais pas quand ils harcèlent nos développeurs et notre service informatique 24/7.
neu242
4
Il existe une alternative à jRebel par le propre ZeroTurnAround: la version gratuite de Jrebel pour les projets open source et l'étude de cas ... my.jrebel.com
dellasavia
2
Je sais que c'est une réponse tardive, vous pouvez jeter un œil à Spring Loaded -, qui est un agent JVM pour recharger les modifications de fichiers de classe pendant qu'une JVM est en cours d'exécution. Il transforme les classes au moment du chargement pour les rendre accessibles à un rechargement ultérieur. Contrairement au `` remplacement de code à chaud '' qui ne permet que des modifications simples une fois qu'une JVM est en cours d'exécution (par exemple, des modifications des corps de méthode), Spring Loaded vous permet d'ajouter / modifier / supprimer des méthodes / champs / constructeurs et plus encore ...
Simple-Solution
Débogueur Eclipse - remplace instantanément votre code en direct.
user1050755
Essayez de publier ceci sur le site partenaire , Software Recommendations Stack Exchange .
Basil Bourque

Réponses:

96

Jetez un œil à DCEVM , c'est une modification de la VM HotSpot qui permet des redéfinitions de classe illimitées au moment de l'exécution. Vous pouvez ajouter / supprimer des champs et des méthodes et modifier les super types d'une classe au moment de l'exécution. Les fonctionnalités de DCEVM pourraient être intégrées dans une future mise à jour de Java dans le cadre de JEP 159 .

Les binaires disponibles sur le site d'origine sont limités à Java 6u25 et aux premières versions de Java 7. Le projet a été forké sur Github et prend en charge les versions récentes de Java 7 et 8. Le mainteneur fournit des binaires pour les VM 32/64 bits sous Windows / Linux. À partir de Java 11, le projet a été déplacé vers un nouveau référentiel GitHub et fournit désormais également des binaires pour OS X.

DCEVM est fourni pour Debian et Ubuntu, il est commodément intégré à OpenJDK et peut être appelé avec java -dcevm. Le nom du package dépend de la version du JDK par défaut:

Emmanuel Bourg
la source
5
Cela fonctionne bien, je l'ai trouvé plus rapide et moins gourmand en mémoire que JRebel. La seule restriction est de s'en tenir à Java 6u25.
Emmanuel Bourg
3
Merci beaucoup. J'ai gâché toute la journée en essayant de faire fonctionner jRebel comme souhaité. DCEVM est venu à la rescousse.
alehro
4
Voici les instructions complètes de construction et d'installation pour DCEVM sur JDK 7u45 et MacOSX: neu242.livejournal.com/52962.html
neu242
1
JEP 159 ne fait pas partie du JDK 8. Il a peut-être été reporté au JDK 9 mais pas encore de confirmation.
KrishPrabakar
5
Vous avez trouvé des binaires JVM 1.7 complets ici: dcevm.nentjes.com donc pas besoin de patcher votre JVM. J'ai essayé le win64 et cela a très bien fonctionné pour moi. J'ai également blogué à ce sujet ici si vous avez besoin de plus de détails: javainformed.blogspot.com/2014/01/jrebel-free-alternative.html
dnang
42

Hotswap Agent est une extension de DCEVM qui prend en charge de nombreux frameworks Java (recharger la définition de Spring bean, mappage d'entité Hibernate, configuration du niveau de journalisation, ...).

Il existe également beaucoup de documentation sur la configuration de DCEVM et des binaires compilés pour Java 1.7.

édudant
la source
5
Ils ont maintenant un site Web dédié: hotswapagent.org . Le projet est assez récent mais il semble bien fonctionner.
Didier L
J'ai suivi ce tutoriel pour l'intégrer dans eclipse après l'avoir inséré: tirthalpatel.blogspot.fr/2014/06 / ... ça marche comme un charme
jpprade
@edudant Après avoir installé 'Hotswap agent', devons-nous installer DCEVM? Parce que j'ai installé DCEVM en utilisant "sudo apt install openjdk-11-jre-dcevm" dans Ubuntu 19.04 et aussi le plugin dans IntelliJ Ultimate 2019.1.3. Si l'installation de 'Hotswap agent' et encore moins fait le travail de JRebel, à quoi sert DCEVM !?
20

Par les gars de Spring, utilisé pour le rechargement de Grails mais fonctionne également avec Java:

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

Ramon
la source
3
Je ne veux pas grogner, mais à ressort ne prend pas en charge le rechargement des dépendances.
lbednaszynski
Si je me souviens bien, il existe des propriétés système que vous pouvez définir pour lui indiquer les packages à recharger. Il a d'autres limitations et je préférerais probablement utiliser DCEVM dans tous les cas.
Ramon
1
"quels paquets rendre rechargeables" - correct. Le problème signalé par @lbednaszynski est qu'il ne rechargera pas les JAR dépendants. C'est essentiel pour les projets multi-modules Maven.
Marcel Stör
Ce projet est dans le grenier pour l'instant!
jpmottin
9

J'ai travaillé sur un projet open source qui vous permet de remplacer à chaud des classes au-delà de ce que permet l'échange à chaud: https://github.com/fakereplace/fakereplace

Cela peut ou non fonctionner pour vous, mais tout commentaire est apprécié

Stuart Douglas
la source
4

Vous voudrez peut-être jeter un coup d'œil à ceci:

Prise en charge HotSwap: l'architecture orientée objet de la VM Java HotSpot permet des fonctionnalités avancées telles que la redéfinition de classe à la volée ou «HotSwap». Cette fonctionnalité offre la possibilité de remplacer du code modifié dans une application en cours d'exécution via les API du débogueur. HotSwap ajoute des fonctionnalités à l'architecture de débogage de la plate-forme Java, permettant à une classe d'être mise à jour pendant l'exécution sous le contrôle d'un débogueur . Il permet également d'effectuer des opérations de profilage par échange à chaud dans les versions de méthodes dans lesquelles du code de profilage a été inséré.

Pour le moment, cela permet uniquement de redéployer le corps de méthode nouvellement compilé sans redémarrer l'application. Tout ce que vous avez à faire est de l'exécuter avec un débogueur. Je l'ai essayé dans Eclipse et cela fonctionne à merveille.

Aussi, comme Emmanuel Bourg l'a mentionné dans sa réponse ( JEP 159 ), il y a de l'espoir d'avoir un support pour l'ajout de supertypes et l'ajout et la suppression de méthodes et de champs.

Référence: Livre blanc Java 135217: Fiabilité, disponibilité et facilité de maintenance

Alex
la source
-3

JRebel est gratuit. Ne l'achetez pas. Sélectionnez l'option «gratuit» (bouton radio) sur la page «acheter». Sélectionnez ensuite "Social". Après votre inscription, vous obtiendrez une clé de licence JRebel entièrement fonctionnelle. Vous pouvez ensuite télécharger JRebel ou utiliser la clé dans la version intégrée de votre IDE. Le hic, (oui, il y a un hic), vous devez leur permettre de publier en votre nom (faire de la publicité) une fois par mois sur votre timeline FB ou votre compte Twitter. Je leur ai donné mon compte Twitter, ce n'est pas grave, je ne l'utilise jamais et personne de ma connaissance ne l'utilise vraiment. Alors économisez 260 $.

Michael Andrews
la source
14
Il y a encore une capture. Il JRebel Social est gratuit uniquement pour un usage non commercial. Oui, bien sûr, nous ne vérifierons pas si vous l'utilisez réellement pour votre projet personnel ou au travail, mais les auditeurs pourraient ne pas l'aimer s'ils voient que vous utilisez mal le logiciel.
Anton Arhipov
2
Je ne suggérerais jamais le contraire. En fait, la seule raison pour laquelle j'en parle est qu'il n'y a plus de licence «individuelle». J'ai pu convaincre mon entreprise de payer ma licence de travail. J'ai ensuite payé une licence personnelle, pour mon usage personnel, pendant plus de 3 ans. Mais lorsque le prix était au nord de 260 $ par an, cela devenait impossible. C'est la meilleure solution pour moi (et pour d'autres), mais j'aurais aussi continué à la payer si le prix était raisonnable.
Michael Andrews
42
De plus, le fait que je doive racheter chaque année un logiciel que j'ai déjà acheté est frustrant. Aucune autre entreprise ne fait cela. Habituellement, vous achetez un logiciel une fois. Si vous optez pour la mise à niveau, vous l'achetez à nouveau pour le prix total (ou peut-être un prix de mise à niveau, selon l'entreprise). Mais ce que vous payez alors, ce sont de NOUVELLES fonctionnalités - pas les mêmes fonctionnalités que vous avez déjà payées. Ce serait comme Apple ou Microsoft désactivant votre ordinateur chaque année jusqu'à ce que vous payiez à nouveau le système d'exploitation. Nourriture pour la pensée.
Michael Andrews
2
JRebel Social a été remplacé par myJRebel. C'est gratuit pour un usage non commercial, il vous suffit d'autoriser le partage de statistiques: my.jrebel.com
Steve Swinsburg
1
Dans l'ensemble, JRebel est relativement bon marché pour une licence de logiciel de développement.
Jared Hooper