Uso de la expansión de propiedad Gradle en Kotlin / Spring Boot
Actualmente estoy construyendo un service Kotlin
, Spring Boot
usando gradle como la herramienta de compilation. Estoy intentando expandir automáticamente las properties encontradas en mi file application.properties
, usando los pasos que se encuentran aquí:
https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html#howto-automatic-expansion-gradle
- No se puede ejecutar la aplicación JavaFX - Kotlin
- Referencia no resuelta: createPrintDocumentAdapter (Kotlin + Android)
- Pruebas unitarias Rxjava observables que tienen un retraso
- Convirtiendo java en kotlin
- Kotlin stdlib y Databinding
Mis versiones son las siguientes:
- kotlin: 1.1.4-3 - spring boot: 1.5.6.RELEASE - gradle: 3.5.1
Cuando ejecuto un ./gradlew bootRun
, ./gradlew bootRun
el siguiente error:
java.lang.IllegalArgumentException: Could not resolve placeholder 'myServiceName' in value "${myServiceName}"
Seguido por:
java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@510aeb93: startup date [Fri Sep 15 10:59:51 AEST 2017]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@68edf5bb
build.gradle:
apply plugin: 'kotlin' apply plugin: 'kotlin-spring' apply plugin: 'org.springframework.boot' processResources { filesMatching('application.properties') { expand(project.properties) } }
gradle.properties:
myServiceName=potato-service
application.properties:
info.app.name=${myServiceName}
Estos errores aparecen después de que la aplicación ha comenzado y Spring está intentando cargar el file de properties.
Lo interesante es que si cambio la variable que estoy tratando de sustituir en application.properties, por ejemplo, myServiceName123, gradle falla en la etapa processResources.
- serializar con gson y volver no funciona con types generics
- ¿Qué es un module de Kotlin?
- Biblioteca Headless de una fuente para JVM y JavaScript
- Android Studio falla refactorizando el código generado de kapt "de solo lectura"
- Kotlin: implementación LinkedList
- ¿Cómo mejorar la syntax de kotlin lambda?
- Uso de LiveData con data binding
- Mutar cadena de una extensión
Entonces, había una pequeña parte de mi build.gradle que no incluí arriba porque no sabía nada al respecto:
bootRun { addResources = true }
De acuerdo con los Spring Boot Docs que tengan el indicador addResources establecido en true, ignorará el file application.properties creado en el paso processResources y, en su lugar, usará el que está en las fonts de sus proyectos. Esto es para permitirle cambiar dinámicamente el file sin necesidad de reiniciar la aplicación.
La solución correcta para esto (si necesita expansión variable cuando se ejecuta con la tarea bootRun
) es establecer:
bootRun { addResources = false }
De lo contrario, si solo necesita expansión al build su jar, dejar esta bandera como true
debería estar bien.
- agregar fragment en la actividad del fragment no funciona en Pixel XL versión de Android 8.0.0
- ¿Cómo paso una matriz de objects de Android a React Native?