tutorial plugin para intellij create scala intellij-idea jetty sbt

plugin - scala para intellij



Depuración del código de Scala con simple-build-tool(sbt) e IntelliJ (11)

Archivo-> Configuraciones-> Otras configuraciones-> Parámetros de SBT VM -Xmx512M -XX: MaxPermSize = 256M -Xdebug -Xrunjdwp: transporte = dt_socket, servidor = y, suspend = n, dirección = 5005

Ejecutar-> Editar configuraciones Presione + y luego seleccione control remoto Presione Aplicar

Ahora en la consola SBT (iniciada por intelliJ) cuando ejecutas el comando ''run'' verás "Listening for dt_socket de transporte en la dirección: 5005"

Ahora presione Ejecutar-> Depurar. Verá los menús de depuración a continuación activados. Tiene dos pestañas, Debugger y Console.

Usa F7 para pasar de la siguiente línea a la siguiente

Elegí suspender para ser n. Con eso y cuando ejecuté el comando de ejecución estaba atorado

¿Cuál es la forma más fácil de depurar el código de Scala administrado por sbt utilizando el depurador integrado de IntelliJ? La documentación de "RunningSbt" del sitio de código google de sbt enumera los comandos para ejecutar la clase principal de un proyecto o las pruebas, pero parece que no hay comandos para la depuración.

Pregunta de seguimiento: ¿Cuál es la forma más fácil de conectar el depurador de IntelliJ a Jetty cuando se usa el comando de ejecución de embarcadero de sbt?


Este funciona para mí todo el tiempo, y lo único que necesita configurar es la depuración remota en IntelliJ; Arranco SBT con parámetros JVM desde el terminal en IntelliJ:

sbt -J-Xdebug -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

Después de eso, puedo iniciar la depuración remota en localhost: 5005


Estoy agregando otra respuesta aquí, porque encontré esta pregunta cuando busqué un problema relacionado: depurar clases de prueba usando puntos de interrupción.

Estoy usando ScalaTest, y normalmente ejecuto un paquete usando el comando sbt ''test-only''. Ahora cuando quiero usar el depurador interactivo, puedo hacer lo siguiente:

Cree una nueva configuración de ejecución / depuración de tipo ''ScalaTest'', coloque el nombre principal de "Clase de prueba:" y elija "Antes del lanzamiento: ejecutar la acción SBT ''compilación de prueba''". Eso es todo, puede colocar puntos de interrupción ahora en las fuentes de prueba y ejecutar esta configuración.


Hay una bandera muy conveniente -jvm-debug en los paquetes SBT oficiales para Mac, Linux y Windows . Puede usar la bandera para especificar el puerto de depuración:

sbt -jvm-debug 5005

Bajo las cubiertas , esto inicia la JVM para SBT con el encantamiento de depuración verbosa típico:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

Ahora puede ejecutar su código de forma normal, por ejemplo con el comando sbt run .

Configurando IntelliJ para conectarse al código en ejecución ...

Ahora conecta IntelliJ a su proceso de ejecución utilizando una configuración de depuración remota . Tenga en cuenta que los 3 campos superiores de esta forma, aunque de miedo, son solo para copiar el texto de, en lugar de hacerlo en (le están dando el encantamiento de depuración verbosa especificado anteriormente, que -jvm-debug ya se ocupa de usted) - La única configuración que puede cambiar es en la sección Settings mitad de camino:


He estado luchando con la depuración también en Windows con una aplicación Spray-can / Akka / Scala creada a través de SBT, usando Intellij. Reuniendo varias sugerencias, el enfoque más simple para mí fue:

  1. Asegúrese de tener sbt.Revolver en su proyecto / archivo plugsin.sbt por ejemplo

    addSbtPlugin ("io.spray"% "sbt-revolver"% "0.7.1")

  2. Establezca javaoptions en su archivo build.sbt:

    javaOptions: = Seq ("- Xdebug", "-Xrunjdwp: transport = dt_socket, server = y, suspend = y, address = 5005")

En particular, use la opción suspend = y. Esto mantendrá la aplicación hasta que conecte un depurador remoto de Intellij

  1. Configure una configuración de depuración en Intellij mediante el menú Ejecutar / Editar configuraciones. Presione el botón +, seleccione la opción "Remoto". Asegúrese de que las entradas coincidan con las javaoptions anteriores, en particular, la dirección del puerto 5005. Dé a la configuración un nombre como ''Spray''.

  2. Desde su consola SBT use el comando de reinicio. Debería ver la dirección del puerto 5005 en la salida de comentarios.

  3. En Intellij configure sus puntos de interrupción.

  4. En Intellij, seleccione Run / Debug ''Spray''. Esto debería conectarse al servidor web de aerosol. Debería poder ver muchos subprocesos en la ventana de depuración.

  5. Tenga cuidado de que algunas de las directivas Get de Spray parecen ejecutarse al inicio, pero no repetidamente al llamar al sitio web.


Ninguna de estas respuestas o enlaces provistos funcionaron para mí, así que una vez que me di cuenta de esto, pensé que lo compartiría ...

incluyendo la comprensión básica que no tenía cuando comencé ...

Esto se basa principalmente en las instrucciones here solo con una explicación adicional que me ayudó a superarlo.

Mi entorno: Scala 2.10.2, SBT 0.13 e IntelliJ 13.1

Fondo:

  • Por alguna razón, usar SBT para compilar Scala en IntelliJ no está integrado de la misma manera que los proyectos de Maven (lo que permite una depuración realmente fácil).
  • Según mi entender, al compilar con SBT, está compilando en un proceso separado, por lo tanto, debe estar depurando remotamente.

¿Qué es la depuración?

  • La depuración es un modo en el que puede ejecutar su JVM o aplicación que le permite controlar el flujo de la ejecución del código.
  • La herramienta de depuración que utiliza puede emitir comandos al motor de depuración que le dice "ejecutar la siguiente línea de código, luego pausar nuevamente" o "continuar ejecutando" o "obtener el valor de la variable almacenada aquí en la memoria".

¿Qué es la depuración remota?

  • La depuración remota se está depurando a través de una conexión de red (socket).
  • Esta conexión de red le permite emitir los comandos al Debug Engine desde una máquina remota.
  • Esto es útil para cuando quiere depurar código que se ejecuta en un servidor remoto, PERO
  • También es útil para situaciones como el código Scala que se ejecuta bajo SBT y el inicio a través de un servidor web, como Jetty o Tomcat, separado de su entorno IntelliJ.

Al hacer referencia al enlace de arriba, las siguientes explicaciones / modificaciones son útiles:

  1. Configure IntelliJ para iniciar SBT con la configuración de JVM "habilitar depuración", incluido el puerto que se utilizará al configurar el socket de red. (sin cambios) agregue los parámetros de VM con nombre a su configuración de IntelliJ.
  2. Asegúrese de que su número de puerto coincida con la configuración de su JVM del Paso 1.
  3. Cuando ejecuta SBT, debe hacerlo desde el complemento de la Consola SBT (que es lo que configuró en el Paso 1). Si está ejecutando SBT fuera de IntelliJ (en la línea de comandos), tendrá que iniciar SBT con los mismos parámetros de VM desde el paso 1 (no hice esto, por lo que no hay instrucciones). Después de este paso, SBT se está ejecutando (pero su código aún no está) y la JVM está configurada para la depuración remota.
  4. Esto inicia la herramienta IntelliJ Debugging Tool, que se conecta a la JVM que inició en el Paso 3.
  5. Finalmente, comienza la compilación en la Consola SBT. Puede hacerlo con cualquier comando de compilación, incluido un comando de compilación continua. Si se vuelve a compilar continuamente, la recompilación se realizará, pero no mientras el depurador pause la ejecución del código.

Para la depuración ordinaria en IntelliJ, puede utilizar una configuración de ejecución / depuración de la aplicación de la forma habitual, independientemente de si está utilizando sbt para compilar su código.

Para conectarse a su aplicación que se ejecuta en Jetty, deberá crear una configuración de depuración remota. Cuando lo haga, IntelliJ le dará un conjunto de argumentos de línea de comando para ejecutar la JVM remota, algo así como

-Xdebug -Xrunjdwp: transport = dt_socket, server = y, suspend = n, address = 5005

Inicie sbt con estos argumentos y luego ejecute jetty-run . Finalmente, inicie su configuración de depuración remota en IntelliJ. Este hilo puede ser útil.


Para lo que vale la gente de Windows, edite %SBT_HOME%/bin/sbt.bat y busque las siguientes líneas de código:

:run "%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %* if ERRORLEVEL 1 goto error goto end

luego reemplázalos con este código:

FOR %%a IN (%*) DO ( if "%%a" == "-jvm-debug" ( set JVM_DEBUG=true set /a JVM_DEBUG_PORT=5005 2>nul >nul ) else if "!JVM_DEBUG!" == "true" ( set /a JVM_DEBUG_PORT=%%a 2>nul >nul if not "%%a" == "!JVM_DEBUG_PORT!" ( set SBT_ARGS=!SBT_ARGS! %%a ) ) else ( set SBT_ARGS=!SBT_ARGS! %%a ) ) if defined JVM_DEBUG_PORT ( set _JAVA_OPTS=!_JAVA_OPTS! -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=!JVM_DEBUG_PORT! ) call :run %SBT_ARGS% if ERRORLEVEL 1 goto error goto end :run "%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %* goto :eof

Lo mejor que puedo hacer es obtener el mismo comportamiento para -jvm-debug cuando se ve en el iniciador de scripts Bash

NÓTESE BIEN. No creo que %SBT_HOME% exista realmente fuera de este script, a menos que lo hayas creado explícitamente en tu entorno, pero de todos modos entiendes: D


También tengo el mismo problema, me gusta compartir cómo lo resolví. Por cierto, estoy usando Ubuntu 14.04 e IntelliJ 15.

  1. En Configuración -> SBT -> Pegado debajo de la línea en el cuadro de texto Parámetros de máquina virtual:

    -XX: MaxPermSize = 384M -Xdebug -Xrunjdwp: transporte = dt_socket, servidor = y, suspend = n, dirección = 5005

  2. Abierto Termilal en IntelliJ y ejecute:

    sbt -jvm-debug 5005

    Nota: debería ver esta línea en la terminal: "Escuchando por el transporte dt_socket en la dirección: 5005"

  3. Editar configuraciones -> Hacer clic en + -> Seleccionar ''Remoto''

    I. Give some name example: DebugMyModule II. All needed configurations will be set automatically, But you just verify. In Command line arguments should look like this "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005". III. In ''Search Sources in Module''s Classpath'' text box specify your module in which module your test cases are there. IV. put 127.0.0.1 host instead of ''localhost''. ''localhost'' not working for me.

  4. Seleccione DebugMyMule en el cuadro de lista Edit Configurations y haga clic en Depurar .

    Nota: Debería ver la Vista de depuración abierta y en la consola de depuración. Debería poder ver "Conectado a la máquina virtual de destino, dirección: ''127.0.0.1:5005'' , transporte: ''socket''".

  5. Coloque puntos de interrupción en algunos casos de prueba en su clase de prueba.

  6. sbt -jvm-debug 5005 a la Terminal donde ejecuta " sbt -jvm-debug 5005 " y ejecute de la siguiente manera

    project <your-module-name> it:testOnly package.TestSpec

    Por ejemplo: com.myproject.module.AddServiceTest [Spec]

  7. Puede ver la depuración iniciada en el punto de interrupción de su caso de prueba.


Tuve algunos problemas con esto también, así que a riesgo de ser demasiado detallado, esto es lo que hice:

PREPARAR

  1. Crear una configuración de ejecución para sbt jetty-run

    • Vaya a Ejecutar> Editar configuraciones
    • Haga clic en el ícono [+] y elija Scala Compilation Server
    • Ingrese el nombre que desee, haga clic en la casilla de verificación "Ejecutar acción SBT" y seleccione el embarcadero SBT Action [...]
  2. Crear una configuración de depuración para la depuración remota

    • Vaya a Ejecutar> Editar configuraciones
    • Haga clic en el ícono [+] y elija Remoto
    • Ingrese el nombre que desee y copie la línea -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 (asegúrese de hacer clic en Aceptar para crear la configuración)
  3. Configure el plugin sbt para ejecutar las opciones de vm anteriores

    • Ve a Archivo> Configuraciones> SBT
    • Pegue la línea -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 en el cuadro de parámetros de VM, después de los que ya están allí

DEBUGGING

  1. Establecer puntos de interrupción como se desee
  2. Inicie el servidor web Jetty eligiendo la configuración sbt jetty-run que creó anteriormente y eligiendo Ejecutar> Ejecutar o haciendo clic en la flecha verde
  3. Inicie el depurador remoto seleccionando la configuración de depuración remota que creó anteriormente y seleccionando Ejecutar> Depurar o haciendo clic en el ícono de error.