Cómo habilitar el intercambio de código activo de Intellij


80

Intellij no parece estar haciendo un intercambio de código activo básico en mi instalación.

Para este código:

public class MainTest {
    public void method1() {
        System.out.println("Breakpoint here");
    }

    public void method2() {
        System.out.println("Line that will get 24 modified");
    }

    public static void main(String[] args) {
        System.out.println("First print here");
        MainTest mainTest = new MainTest();
        mainTest.method1();
        mainTest.method2();
        System.out.println("Line that I do not modify");
    }
}

Pongo un punto de interrupción y mainTest.method1();luego modifico la cadena en el método2 (), presiono ctrl + sy continúo paso a paso. Desafortunadamente, el tiempo de ejecución no se actualiza, se está imprimiendo la cadena antigua. Parada completa - compilar - ejecutar imprime la nueva cadena. Entonces mi conclusión es que el intercambio en caliente no funciona.

¿Hay alguna configuración que deba establecer para habilitar el intercambio de código activo?

  • Ubuntu, JDK 1.6
  • Intellij 10.5 Ultimate (evaluación)

Nunca he oído hablar del intercambio en caliente para aplicaciones de línea de comandos, solo para aplicaciones web.
duffymo

11
Viniendo de eclipse, que hace esto, esperaría que intellij también pueda hacer esto. ¿Me estoy perdiendo de algo?
Maxim Veksler

También estaba enfrentando muchos problemas con esto, y luego supe que si está usando VM, entonces el intercambio en caliente no funcionará
Ashish Shetkar

Respuestas:


103

Después de guardar su clase mientras espera su punto de interrupción, simplemente vuelva a compilar su clase Build -> Compile 'MainTest.java'o presione Ctrl+Shift+F9con las combinaciones de teclas estándar.

IntelliJ IDEA mostrará un pequeño cuadro de diálogo en el que le preguntará si desea volver a cargar esa clase.


6
Muchas gracias. ¿Puedo hacer que intellij se compile automáticamente? (una característica mucho mejor sería permitir: guardar sin compilar automáticamente y luego tener la compilación bajo demanda activada por defecto).
Maxim Veksler


¡Muchas gracias, busqué esto mucho tiempo!
Simcha

Muchos errores de compilación durante la depuración antes del intercambio en caliente. Paquetes no encontrados.
Sunnyday

@Sunnyday Esto se ha corregido en IntelliJ IDEA 2019.1: youtrack.jetbrains.com/issue/IDEA-163187
joschi

26

Después de las siguientes modificaciones y habilitar el intercambio en caliente, un cambio en un archivo Java tomó 1-2 segundos de reinicio. (La hora de inicio inicial es de alrededor de 7 segundos para mí).

Espero que el siguiente método ayude ...


Primero, debe marcar "Hacer proyecto automáticamente" en el menú de preferencias.

Para abrir el menú de preferencias;

puede ir al menú superior y hacer clic;

IntelliJ IDEA -> Preferencias

o puede escribir el siguiente atajo a través del teclado;

cmd + opción + s

Luego, puede verificar Make project automaticallycomo en la imagen de abajo;

ingrese la descripción de la imagen aquí

En segundo lugar, debe modificar la compiler.automake.allow.when.app.runningconfiguración del registro como verdadera.

Para abrir el registro, debe hacer clic debajo del atajo de teclado:

cmd + shift + a

Escriba registrycomo en la imagen de abajo, seleccione Registryy presione el botón Enter del teclado;

ingrese la descripción de la imagen aquí

Después de Registryabrir la ventana, escriba compiler.automakepara ver la compiler.automake.allow.when.app.runningopción y verifíquela como en la imagen de abajo;

ingrese la descripción de la imagen aquí

Luego, debe reiniciar IntelliJ para que los cambios en el registro funcionen.


2
HotSwap funciona para mí cuando depuro la aplicación y luego compilo el proyecto o simplemente compilo un archivo. Sin embargo, no funciona para guardar incluso después de realizar la configuración de registro anterior. ¿Es porque estoy en depuración y no en ejecución?
DKroot

2
@DKroot, sí, en IntelliJ debe estar en modo de depuración para que funcione el intercambio en caliente.
J Woodchuck


4

Vaya a Configuración -> Seleccione Depurar -> HotSwap

ingrese la descripción de la imagen aquí


1
Incluso cuando uso esto, todavía tengo que instruir manualmente a intelliJ para que vuelva a compilar. Esto lo hace un poco más fácil porque no tiene que responder a la pregunta de si desea volver a cargar las clases.
Henno Vermeulen

3

Quería que hotswap se ejecutara automáticamente cada vez que guardaba un archivo Java. Ninguna de las otras respuestas hizo esto, así que solo:

  1. Creó una macro que se ejecutará al guardar: https://stackoverflow.com/a/5581992/14731
  2. Agregado Action: Hotswapal final de la macro ( Run -> Reload Changed Classes)


0

Encontré este problema en Ubuntu. También tuve un problema aparentemente no relacionado en el que IntelliJ dio un error sobre el límite de visualización de archivos (mis disculpas porque ya no tengo el mensaje de error exacto). Para resolver este problema posterior, hice los siguientes pasos:

  1. Agregue la siguiente línea al /etc/sysctl.confarchivo o un nuevo archivo * .conf (por ejemplo idea.conf) en el /etc/sysctl.d/directorio:

    fs.inotify.max_user_watches = 524288
    
  2. Luego ejecute este comando para aplicar el cambio:

    sudo sysctl -p --system

Ahora mis componentes de React se reconstruyen e intercambian en caliente sin problemas.

Fuente


Tengo un problema similar. sin embargo, esto (aumento del observador de archivos) no me ayudó.
Rejeev Divakaran

0

Creo que estás preguntando sobre esto

  1. Haga clic derecho en su clase de Java
  2. Seleccione Compilar y recargar archivo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.