2015-10-09 13 views
9

में ग्रेडल गुणों का संदर्भ देना यदि इस प्रश्न से पूछा गया है और उत्तर दिया गया है, या दस्तावेज़ या उदाहरण है, तो कृपया मुझे क्षमा करें। मैंने स्टैक ओवरफ्लो पर एक समाधान की तलाश में कई घंटों बिताए हैं और यहां तक ​​कि ग्रेडल दस्तावेज़ में और भी अधिक समय बिताया है और यह काम करने में सक्षम नहीं है।application.yml

मेरे पास एक सुंदर मानक मेवेन लेआउट वाला वसंत बूट प्रोजेक्ट है। मैं ग्रेड 2.4 का उपयोग कर रहा हूँ।

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

gradle.properties में, मैं परिभाषित किया है निम्नलिखित गुण: यहां प्रासंगिक फ़ाइलों के लेआउट है

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

मेरी application.yml फ़ाइल में, मैं करने के लिए इसी वसंत गुण सेट करना चाहते हैं वही मूल्य। (मैं उन्हें एक स्थान पर एक साथ परिभाषित करना चाहता हूं और उन्हें कई स्थानों पर उपयोग करना चाहता हूं। version आमतौर पर gradle.properties में परिभाषित किया जाता है, मैं बाकी को भी क्लस्टर करना चाहता हूं।)

मैंने निम्नलिखित की कोशिश की है application.yml में लाइन है, लेकिन चीजें काम कर रहे हैं नहीं आशा व्यक्त की है: (। मैं भी ${project.name} की कोशिश की, आदि यही कारण है कि या तो काम नहीं किया)

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

मैं gradlew properties भाग गया ... गुण उम्मीद के अनुसार मूल्यों के साथ सूचीबद्ध हैं। हालांकि, जब मैं एक बिल्ड चलाता हूं, तो yaml फ़ाइल को \build\resources\main में कॉपी किया गया है, लेकिन ${value} टोकन हल नहीं किए गए हैं।

मैंने build.gradle फ़ाइल में निम्न पंक्तियां भी शामिल की हैं, लेकिन चीजें अनसुलझे रहती हैं।

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

(मेरा लक्ष्य actuator /info endpoint उपयोग करने के लिए एक सेवा फोन करने वाले को उन गुणों के मूल्यों प्रदान करना है।)

प्रलेखन के लिए कोई सुझाव या संकेत दिए गए कि मदद बहुत सराहना की जाएगी!

उत्तर

2

क्या आपने कॉपी कार्य का उपयोग करने के बारे में सोचा है? वहाँ आप विस्तार करने के लिए वैरिएबल निर्धारित कर सकते हैं:

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

} 

अपनी प्रॉपर्टी आप भी एक गुण फ़ाइल का उल्लेख कर सकते अलग रखना चाहते हैं :

expand(project.properties) 

आप Gradle दस्तावेज़ पर एक नज़र लेने के लिए चाहते हो सकता है: https://docs.gradle.org/current/userguide/working_with_files.html

क्या आपको यह विचार मिला?

+0

यह मेरे लिए काम नहीं कर रहा है ... मुझे अपवाद मिल रहा है: groovy.lang.MissingPropertyException: इस तरह की कोई संपत्ति नहीं: वर्ग के लिए प्रोजेक्ट: SimpleTemplateScript1 – drhender

+0

@drhender क्या आप पूरे कॉल स्टैक और/या बिल्ड-स्क्रिप्ट – TobiSH

0

अधिक tinkering के बाद, मैंने पाया कि मूल्य रनटाइम पर विस्तारित हैं। जब वसंत पर्यावरण में गुणों को परिभाषित करता है तो $ {value} टोकन का विस्तार किया गया था जिस तरह से मैंने आशा की थी। अधिक विचार के बाद, यह सही समझ में आता है। उन मूल्यों को बिल्ड-टाइम पर हल नहीं किया जा सकता है क्योंकि इसे विभिन्न स्थानों पर सेट किया जा सकता है। रनटाइम वसंत गुण वर्तमान मूल्य को दर्शाते हैं, भले ही संपत्ति आवेदन के माध्यम से सेट की गई हो।जार में yml, jar के साथ बैठे application.yml, या जब जार निष्पादित किया जाता है तो एक-डी स्विच के माध्यम से।

+0

बस स्पष्ट करने के लिए, गुण * * को बिल्ड समय पर सेट किया जा सकता है - * और * जैसा कि आप उल्लेख करते हैं, उन्हें रन टाइम पर ओवरराइड किया जा सकता है। ऐप में निर्माण समय की जानकारी को एम्बेड करना अभी भी उपयोगी है, इसलिए इसे पहचान और विशिष्ट किया जा सकता है * भले ही यह जानकारी बाद में ओवरड्राइड हो (छुपाएं) *। – m0j0hn

6

मुझे हाल ही में एक ही स्थिति का सामना करना पड़ा - यहां मेरे लिए क्या काम किया गया है।

टीएल; डीआर: वसंत बूट 1.2.5 में, जानकारी। * Application.yml में गुण/जानकारी द्वारा अनदेखा किया जाता है; जानकारी के लिए application.properties का उपयोग करने की आवश्यकता है। * गुण।

सबसे पहले, इस सामग्री के साथ src/मुख्य/संसाधन/application.properties बनाएँ:

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

दूसरा, अपने build.gradle फ़ाइल को यह स्निपेट शामिल:

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

इसके बाद, चलाने सामान्य के रूप में आपका निर्माण। यह application.properties फ़ाइल को संसाधित करेगा और चर को उनके बिल्ड-टाइम मानों के साथ प्रतिस्थापित करेगा क्योंकि यह फ़ाइल को/संसाधन/मुख्य/application.properties बनाने के लिए प्रतिलिपि बनाता है।

मेरे लिए, तैनात किए जाने पर .jar, मेरा/जानकारी एंडपॉइंट विस्तारित मानों के साथ पॉप्युलेट किया गया है, जो लक्ष्य है।

ध्यान दें कि बोनस अंक के लिए आप इस अपने build.gradle करने के लिए/जानकारी endpoint में Git जानकारी पाने के लिए भी जोड़ सकते हैं:

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

तुम भी निर्माण की निर्भरता अनुभाग को यह जोड़ने की आवश्यकता होगी .gradle, इसके लिए काम करने के लिए:

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

आशा है कि इससे मदद मिलती है!

+0

इसके लिए धन्यवाद। तुमने मेरी जान बचाई! – Lemuel

संबंधित मुद्दे