variable studio property not from found entorno gradle properties reference resolution

studio - gradle.properties proxy



Hacer referencia a las propiedades de gradle en application.yml (3)

Si esta pregunta ha sido hecha y respondida, o si hay un documento o un ejemplo, por favor, perdóneme. He pasado varias horas buscando una solución aquí en stackoverflow y aún más tiempo en el documento gradle y no he podido hacer que esto funcione.

Tengo un proyecto de arranque de primavera con un diseño de maven bastante estándar. Estoy usando gradle 2.4. aquí está el diseño de los archivos relevantes:

/gradle.properties /build.gradle /settings.gradle /src/main/resources/application.yml

En gradle.properties , he definido las siguientes propiedades:

name=Sample microservice description=brief description of the service goes here version=1.0.0-SNAPSHOT

En mi archivo application.yml, me gustaría establecer propiedades de resorte correspondientes a esos mismos valores. (Me gustaría definirlos juntos en un solo lugar y usarlos en varios lugares. Como la version se define típicamente en gradle.properties, también quiero agrupar el resto allí).

Probé la siguiente línea en application.yml, pero las cosas no funcionan como esperaba:

info.app.name: ${name} info.app.description: ${description} info.app.version: ${version}

(También probé ${project.name} , etc. Eso tampoco funcionó).

gradlew properties ... las propiedades se enumeran con los valores esperados. Sin embargo, cuando ejecuto una construcción, el archivo yaml se copia en /build/resources/main como se esperaba, pero los tokens de ${value} no se resuelven.

También build.gradle las siguientes líneas en el archivo build.gradle , pero las cosas siguen sin resolverse.

processResources { filesMatching(''gradle.properties'') { expand(project.properties) } }

(Mi objetivo es usar el punto final del actuador /info para proporcionar los valores de esas propiedades a un llamador del servicio).

¡Cualquier sugerencia o sugerencia a la documentación que ayuda sería muy apreciada!


¿Has pensado en usar la tarea Copiar? Allí puede definir variables para expandir:

application.yml:

info.app.name: ${project.name} info.app.description: ${project.description} info.app.version: ${project.version} info.app.foo: ${foo}

build.gradle:

task copyConfig(type: Copy) { from (''src/main/resources'') into ''build/config'' // refer to project and replace foo by string bar expand(project: project, foo: ''bar'') }

Si desea mantener sus propiedades separadas, también puede consultar un archivo de propiedades:

expand(project.properties)

Es posible que desee echar un vistazo al documento de gradle: https://docs.gradle.org/current/userguide/working_with_files.html

¿Tuviste la idea?


Después de más retoques, descubrí que los valores se expanden en tiempo de ejecución. Cuando Spring define las propiedades en el entorno, los tokens $ {value} se expanden de la manera que yo esperaba. Después de pensarlo más, esto tiene perfecto sentido. Esos valores no pueden resolverse en tiempo de compilación porque se pueden establecer en una variedad de lugares. Las propiedades del resorte en tiempo de ejecución reflejan el valor actual, ya sea que la propiedad se establezca a través de application.yml en el jar, application.yml sentado al costado del jar, o mediante un -d switch cuando el jar se ejecuta.


Recientemente me enfrenté a la misma situación: esto es lo que funcionó para mí.

TL; DR: en Spring Boot 1.2.5, las propiedades de info. * En application.yml son ignoradas por / info; necesita usar application.properties para las propiedades de info. *.

Primero, cree src / main / resources / application.properties con este contenido:

info.build.description=${description} info.build.name=${name} info.build.version=${version}

En segundo lugar, agregue este fragmento a su archivo build.gradle:

processResources { filesMatching("**/application.properties") { expand( project.properties ) } }

A continuación, ejecuta tu compilación de forma normal. Esto procesará el archivo application.properties y reemplazará las variables con sus valores de compilación a medida que copie el archivo a build / resources / main / application.properties.

Para mí, al ejecutar el .jar desplegado, mi punto final / info se rellena con los valores expandidos, que es el objetivo.

Tenga en cuenta que para los puntos de bonificación puede agregar esto a su build.gradle para obtener información de Git en el punto final / info, también:

apply plugin: "com.gorylenko.gradle-git-properties"

También deberá agregar esto a la sección de dependencias de build.gradle, para que funcione:

classpath ''gradle.plugin.com.gorylenko.gradle-git-properties:gradle-git-properties:1.+''

¡Espero que esto ayude!