Volver a implementar alternativas a JRebel [cerrado]

190

JRebel permite que el código recién compilado se vuelva a implementar sin reiniciar la aplicación. Me pregunto si hay alguna alternativa (¿gratis?). La página de preguntas frecuentes responde a esta pregunta, pero estoy seguro de que está sesgada hacia JRebel. Esta pregunta se hizo hace un año en este sitio, pero la vuelvo a plantear para ver si alguien tiene información nueva.

En una nota al margen, realmente me gusta JRebel, pero si hay una alternativa gratuita, estoy dispuesto a probarla.

Una nota adicional, estoy trabajando en un proyecto de código abierto, y ofrecen licencias gratuitas de un año a las personas que pueden demostrar que están en un proyecto de código abierto. Lo que funciona muy bien para mí (www.kuali.org), pero no estaré en ese proyecto para siempre.

Arrendajo
fuente
53
Buena pregunta. También hemos estado buscando una alternativa a JRebel, ya que su departamento de ventas es extremadamente invasivo. No tenemos problemas para pagar un producto como JRebel, pero no cuando molestan a nuestros desarrolladores y al departamento de TI 24/7.
neu242
44
Hay una alternativa a jRebel por el propio ZeroTurnAround: la versión gratuita de Jrebel para proyectos de código abierto y estudio de caso ... my.jrebel.com
dellasavia
2
Sé que es una respuesta tardía, puedes echar un vistazo a Spring Loaded , que es un agente JVM para recargar los cambios de archivos de clase mientras se está ejecutando un JVM. Transforma las clases en el momento de la carga para que puedan volver a cargarse más tarde. A diferencia de 'hot code replace' que solo permite cambios simples una vez que se está ejecutando una JVM (por ejemplo, cambios en los cuerpos de los métodos), Spring Loaded le permite agregar / modificar / eliminar métodos / campos / constructores y más ...
Simple-Solution
Depurador de Eclipse: reemplaza su código en vivo al instante.
user1050755
Intente publicar esto en el sitio hermano, Recomendaciones de software Stack Exchange .
Basil Bourque

Respuestas:

97

Eche un vistazo a DCEVM , es una modificación de HotSpot VM que permite redefiniciones de clase ilimitadas en tiempo de ejecución. Puede agregar / eliminar campos y métodos y cambiar los supertipos de una clase en tiempo de ejecución. Las características de DCEVM pueden integrarse en una futura actualización de Java como parte de JEP 159 .

Los archivos binarios disponibles en el sitio original están limitados a Java 6u25 y a versiones anteriores de Java 7. El proyecto se ha bifurcado en Github y admite versiones recientes de Java 7 y 8. El responsable del mantenimiento proporciona archivos binarios para máquinas virtuales de 32/64 bits en Windows / Linux A partir de Java 11, el proyecto se trasladó a un nuevo repositorio de GitHub y ahora también proporciona binarios para OS X.

DCEVM está empaquetado para Debian y Ubuntu, está convenientemente integrado con OpenJDK y puede invocarse con él java -dcevm. El nombre del paquete depende de la versión del JDK predeterminado:

Emmanuel Bourg
fuente
55
Funciona bien, lo encontré más rápido y consume menos memoria que JRebel. La única restricción es apegarse a Java 6u25.
Emmanuel Bourg el
3
Muchas gracias. He arruinado todo el día tratando de hacer que jRebel funcione como lo desee. DCEVM vino a rescatar.
alehro
44
Aquí están las instrucciones completas de construcción e instalación para DCEVM en JDK 7u45 y MacOSX: neu242.livejournal.com/52962.html
neu242
1
JEP 159 no es parte de JDK 8. Es posible que se haya pospuesto a JDK 9 pero aún no hay confirmación.
KrishPrabakar
55
Encontré algunos binarios completos de JVM 1.7 aquí: dcevm.nentjes.com, así que no es necesario parchear su JVM. Probé el win64 y funcionó muy bien para mí. También escribí un blog al respecto aquí si necesita más detalles: javainformed.blogspot.com/2014/01/jrebel-free-alternative.html
dnang
42

Hotswap Agent es una extensión de DCEVM que admite muchos frameworks Java (recarga de definición de Spring Beans, mapeo de entidades de Hibernate, configuración de nivel de registrador, ...).

También hay mucha documentación sobre cómo configurar DCEVM y binarios compilados para Java 1.7.

edudant
fuente
55
Ahora tienen un sitio web dedicado: hotswapagent.org . El proyecto es bastante nuevo pero parece funcionar bastante bien.
Didier L
Seguí este tutorial para integrarlo en eclipse después de instalarlo : tirthalpatel.blogspot.fr/2014/06/… funciona como un encanto
jpprade
@edudant Después de instalar 'Hotswap agent', ¿necesitamos instalar DCEVM? Porque he instalado DCEVM usando "sudo apt install openjdk-11-jre-dcevm" en Ubuntu 19.04 y también el complemento en IntelliJ Ultimate 2019.1.3. Si instala 'Hotswap agent' y mucho menos hace el trabajo de JRebel, ¿de qué sirve DCEVM?
20

Por los chicos de Spring, se usa para la recarga de Grails pero también funciona con Java:

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

Ramon
fuente
3
No quiero quejarme, pero el resorte no admite la recarga de dependencias.
lbednaszynski
Como recuerdo, hay propiedades del sistema que puede configurar para decirle qué paquetes hacer recargables. Tiene otras limitaciones y probablemente preferiría ir con DCEVM en cualquier caso.
Ramon
1
"qué paquetes hacer recargables" - correcto. El problema señalado por @lbednaszynski es que no volverá a cargar los JAR dependientes. Eso es esencial para los proyectos de módulos múltiples de Maven.
Marcel Stör
¡Este proyecto está en el ático por ahora!
jpmottin
9

He estado trabajando en un proyecto de código abierto que le permite reemplazar las clases en caliente más allá de lo que permite el intercambio en caliente: https://github.com/fakereplace/fakereplace

Puede o no funcionar para usted, pero apreciamos cualquier comentario

Stuart Douglas
fuente
4

Es posible que desee echar un vistazo a esto:

Compatibilidad con HotSwap: la arquitectura orientada a objetos de Java HotSpot VM permite características avanzadas como la redefinición de clases sobre la marcha o "HotSwap". Esta característica proporciona la capacidad de sustituir el código modificado en una aplicación en ejecución a través de las API del depurador. HotSwap agrega funcionalidad a la arquitectura del depurador de la plataforma Java, permitiendo que una clase se actualice durante la ejecución mientras está bajo el control de un depurador . También permite que las operaciones de creación de perfiles se realicen mediante hotswapping en versiones de métodos en los que se ha insertado el código de creación de perfiles.

Por el momento, esto solo permite que el cuerpo del método recién compilado se vuelva a implementar sin reiniciar la aplicación. Todo lo que tienes que hacer es ejecutarlo con un depurador. Lo probé en Eclipse y funciona espléndidamente.

Además, como Emmanuel Bourg mencionó en su respuesta ( JEP 159 ), existe la esperanza de tener soporte para la adición de supertipos y la adición y eliminación de métodos y campos.

Referencia: Java Whitepaper 135217: Fiabilidad, disponibilidad y facilidad de servicio

Alex
fuente
-3

JRebel es gratis. No lo compres. Seleccione la opción "gratuita" (botón de opción) en la página "comprar". Luego seleccione "Social". Después de registrarse, obtendrá una clave de licencia JRebel completamente funcional. Luego puede descargar JRebel o usar la clave en su versión incrustada de IDEs. La captura, (sí, hay una captura), debe permitir que publiquen en su nombre (publicidad) una vez al mes en su línea de tiempo de FB o en su cuenta de Twitter. Les di mi cuenta de Twitter, no es problema, nunca la uso y nadie que conozco realmente la usa. Así que ahorre $ 260.

Michael Andrews
fuente
14
Hay una trampa más. Es JRebel Social es gratis solo para uso no comercial. Sí, claro, no verificaremos si realmente lo está utilizando para su proyecto personal o en el trabajo, pero a los auditores puede que no les guste si ven que usan el software de manera incorrecta.
Anton Arhipov
2
Nunca sugeriría lo contrario. De hecho, la única razón por la que menciono esto es porque ya no hay una licencia "individual". Pude hacer que mi empresa pagara mi licencia de trabajo. Luego también pagué por una licencia personal, para mi uso personal, durante más de 3 años. Pero cuando el precio era de $ 260 al año, eso no era práctico. Esta es la mejor solución para mí (y para otros), pero también habría seguido pagándola si el precio fuera razonable.
Michael Andrews
42
Además, el hecho de que cada año necesito recomprar software que ya compré es frustrante. Ninguna otra compañía hace esto. Por lo general, compra software una vez. Si opta por actualizar, entonces lo compra nuevamente a precio completo (o tal vez un precio de actualización, dependiendo de la compañía) Pero lo que está pagando son NUEVAS características, no las mismas características que ya pagó. Sería como Apple o Microsoft deshabilitando su computadora cada año hasta que pague nuevamente el sistema operativo. Comida para el pensamiento.
Michael Andrews
2
JRebel Social ha sido reemplazado por myJRebel. Es gratis para uso no comercial, solo necesita permitir el intercambio de estadísticas: my.jrebel.com
Steve Swinsburg
1
Con todo, JRebel es relativamente barato para una licencia de software de desarrollador.
Jared Hooper