Diferencia entre las configuraciones de compilación y tiempo de ejecución en Gradle

102

Mi pregunta es un poco común, pero también está relacionada con Gradle.

¿Por qué necesitamos compilar y configurar en tiempo de ejecución?

Cuando compilo algo, necesito artefactos para convertir mis clases de Java en código de bytes, por lo que necesito compilar la configuración, pero ¿por qué se necesita una configuración de tiempo de ejecución? ¿Necesito algo más para ejecutar mi aplicación en JVM?

Lo siento si suena estúpido, pero no lo entiendo.

Xelian
fuente

Respuestas:

149

En el caso más común, los artefactos necesarios en tiempo de compilación son un subconjunto de los necesarios en tiempo de ejecución. Por ejemplo, digamos que un programa llamado appusa biblioteca fooy la biblioteca usa biblioteca foo internamentebar . Entonces solo foose necesita compilar app, pero se necesitan ambos fooy barpara ejecutarlo. Es por eso que, por defecto, todo lo que pones en la compileconfiguración de Gradle también es visible en su runtimeconfiguración, pero lo contrario no es cierto.

Peter Niederwieser
fuente
20
Es una pena que esto no se mencione explícitamente en gradle.org/docs/current/userguide/dependency_management.html . Usan compilación y tiempo de ejecución sin indicar explícitamente su significado ...
silasdavis
2
@silasdavis En la documentación se explica la diferencia: gradle.org/docs/current/userguide/… en 8.3. Configuraciones de dependencia
angelcervera
@angelcervera Ah, así es, 8. Fundamentos de la gestión de dependencias y 51. Gestión de dependencias. Puedo ver por qué tienen dos secciones, pero quizás sería bueno si la última hiciera referencia a la primera. Creo que aterricé en 51 y esperaba que me diera cuenta completa.
silasdavis
@silasdavis Cierto. Lo mismo para otras secciones de la documentación. Debo tomarme el mismo tiempo libre para leer toda la documentación de la A a la Z.
angelcervera
1
@Peter Niederwieser Si la tarea de compilación muestra las mismas dependencias que el tiempo de ejecución, ¿en qué escenario usaría el tiempo de ejecución en lugar de compilar?
rj2700