2015-10-09 13 views
9

konusundaki oylama özellikleri Bu soru soruldu ve yanıtlandıysa veya dokümen ya da örnek varsa lütfen beni affet. Stackoverflow'da ve hatta gradyan dokusunda daha fazla zaman için bir çözüm aramak için birkaç saat harcadım ve bu işi yapamadım.application.yml

Oldukça standart bir maven düzenine sahip bir önyükleme projem var. Gradle 2.4 kullanıyorum.

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

gradle.properties, ben tanımladığınız aşağıdaki özellikleri: Burada Alakalı dosyaların düzeni olması benim application.yml dosyasında

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

, ben bahar özelliklerini tekabül ayarlamak istiyorum aynı değerler. (Bunları tek bir yerde bir arada tanımlamak ve bunları birkaç yerde kullanmak isterim. version tipik olarak gradle.properties içinde tanımlandığından, oradakileri de kümelemek istiyorum.)

Aşağıdakileri denedim application.yml çizgi ama işler umduğu gibi çalışmıyor: (. Ben de ${project.name} çalıştı vb da işe yaramadı Yani)

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

Ben gradlew properties ran ... özellikleri beklenen değerlerle listelenir. Ancak, bir yapı çalıştırdığımda, yaml dosyası beklendiği gibi \build\resources\main içine kopyalanır, ancak ${value} simgeleri çözülmez.

Ayrıca aşağıdaki satırları build.gradle dosyasına ekledim, ancak işler çözülmeden kalır.

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

(Amacım bir hizmet arayana bu özelliklerin değerlerini sağlamak üzere aktüatör /info bitiş noktası kullanmaktır.) Belgelerine

Herhangi bir öneri veya işaretçiler o Yardım büyük mutluluk duyacağız!

cevap

2

Kopyalama görevini kullanmayı düşündünüz mü? Orada genişletmek için değişkenleri tanımlayabilirsiniz:

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') 

} 

sizin de bir özellikler dosyası başvurabilir ayrılmış özelliklerinizi tutmak istiyorsanız :

expand(project.properties) 

Not gradına bir göz atmak isteyebilirsiniz: https://docs.gradle.org/current/userguide/working_with_files.html

Bu fikri aldınız mı?

+0

Bu benim için çalışmıyor ... Bir istisna alıyorum: Nedeniyle: groovy.lang.MissingPropertyException: Böyle bir özellik yok: sınıf için proje: SimpleTemplateScript1 – drhender

+0

@drhender lütfen tüm çağrı yığınını sağlayabilir misiniz? ya da yapı-betiği – TobiSH

0

Daha fazla müdahale ettikten sonra, değerlerin çalışma zamanında genişletildiğini keşfettim. Bahar ortamdaki özellikleri tanımladığında $ {value} jetonları umduğum gibi genişletti. Daha fazla düşünce sonra, bu mükemmel mantıklı. Bu değerler, yapım aşamasında çözülemez çünkü bu çeşitli yerlerde ayarlanabilir. Çalışma zamanı yayı özellikleri, özellik uygulama yoluyla ayarlanmış olsun, geçerli değeri yansıtır.kavanozda yml, jar boyunca yan yana oturan application.yml veya jar yürütüldüğünde bir -d düğmesiyle.

+0

Sadece açıklığa kavuşturmak için, özellikler * yapı zamanında ayarlanabilir * - ve * bahsettiğiniz gibi çalışma zamanında geçersiz kılınabilirler. Uygulamaya zaman bilgisi oluşturmak için hala yararlıdır, böylece bu bilgiler daha sonra geçersiz kılınabilir (gizlenmiş olsa bile) * fark edilebilir ve ayırt edilebilir *. – m0j0hn

6

Son zamanlarda aynı durumla karşı karşıya kaldım - işte benim için çalıştı.

TL; DR: In Spring Boot 1.2.5, info. * Application.yml'deki özellikler/bilgi tarafından dikkate alınmaz; bilgi için application.properties kullanmanız gerekir.

Birincisi, bu içerik ile src/main/resources/application.properties oluşturun:

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

İkinci senin build.gradle dosyasına bu pasajı ekleyin: çalıştırmak

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

İleri, yapman normal. Bu, application.properties dosyasını işleyecektir ve değişkenleri, kaynak/main/application.properties oluşturmak için kopyalarken, build-time değerleriyle değiştirecektir.

Benim için, dağıtılmış .jar'ı çalıştırırken,// ​​bilgi uç noktası hedef olan genişletilmiş değerler ile doldurulur. Bonus puan için siz de/bilgi son noktada Git bilgi almak için build.gradle bu ekleyebileceğiniz

Not:

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

Ayrıca yapı bağımlılıkları bölümüne bu eklemeniz gerekir .gradle, bunun çalışması için:

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

Bu yardımcı olur umarız!

+0

bunun için teşekkür ederim. Hayatımı kurtardın! – Lemuel

İlgili konular