2010-10-07 11 views
5

मैं पृष्ठ में अपने वेब एप्लिकेशन का वर्तमान संस्करण चलाना चाहता हूं। यह परियोजना मेवेन, स्प्रिंग और विकेट पर आधारित है।स्प्रिंग कॉन्फ़िगरेशन फ़ाइलों में एक्सेस मेवेन प्रोजेक्ट संस्करण

मैं किसी भी तरह से मैवेन के ${project.version} का मूल्य प्राप्त करना चाहता हूं और इसे अपने वसंत एक्सएमएल फाइलों में उपयोग करना चाहता हूं, वैसे ही मैं स्प्रिंग प्रॉपर्टीप्लेसहोल्डर कॉन्फ़िगरर का उपयोग करता हूं ताकि मैं अपने आवेदन में उपयोग की जाने वाली सेटिंग्स के लिए एक प्रॉपर्टी फ़ाइल पढ़ सकूं।

अगर मैं Maven project.version मेरी स्प्रिंग config में एक चर के रूप में उपलब्ध था, मैं कुछ इस तरह कर सकता है:

<bean id="applicationBean" class="com.mysite.web.WicketApplication"> 
<property name="version"><value>${project.version}</value></property> 
</bean> 

कैसे मैं यह कर सकता है?

उत्तर

11

आप पहले से सुझाए गए मेवेन filtering का उपयोग कर सकते हैं।

या फिर आप वसंत के साथ सीधे META-INF निर्देशिका के अंतर्गत Maven द्वारा बनाई pom.properties फ़ाइल पढ़ सकता है:

<util:properties id="pom" 
    location="classpath:META-INF/groupId/artifactId/pom.properties" /> 

और सेम का उपयोग करें।

बाद के दृष्टिकोण का एकमात्र दोष यह है कि pom.propertiespackage चरण समय पर बनाया गया है (और test के दौरान वहां नहीं होगा)।

+0

yup, यह एक अच्छा समाधान है (+1) –

+0

शानदार लिंक, मुझे वही चाहिए जो मुझे चाहिए। विभिन्न संसाधनों के लिए फ़िल्टरिंग को शामिल और बहिष्कृत करने का तरीका दिखाता है, @Derek द्वारा प्रारंभ की गई आरंभ मार्गदर्शिका के विपरीत। विकल्प के लिए भी धन्यवाद, लेकिन फ़िल्टरिंग चाल ठीक है। – Tauren

+0

वह लाइन कहां जाना है? – Randell

7

एक तकनीक मावेन फ़िल्टरिंग का उपयोग करना होगा। आप संसाधन फ़ाइलों में प्लेसहोल्डर डाल सकते हैं जैसे संसाधन संसाधन के दौरान निर्माण से मूल्यों के साथ प्रतिस्थापित किया जाता है।

देखो "मैं संसाधन फ़ाइलों को कैसे फ़िल्टर करूं?" Maven getting started guide

+0

सहायता के लिए धन्यवाद! – Tauren

0

हम वेब ऐप के बाहर संपत्ति फ़ाइलों को तैनात करते हैं। फ़ाइलों को तैनाती के समय फ़िल्टर किया जा सकता है।

जेटी का उपयोग करने से फ़ाइल $ JETTY_HOME/संसाधनों के तहत फ़ाइल डाल सकती है या रनटाइम पर प्रॉपर्टी फ़ाइल लोड करने के लिए अतिरिक्त क्लासपैथ सुविधा का उपयोग कर सकती है।

1

मेटा-आईएनएफ निर्देशिका में मेवेन द्वारा बनाई गई pom.properties फ़ाइल जोड़ने के लिए @PropertySource एनोटेशन का उपयोग करें। ध्यान दें कि फ़ाइल पैकेज चरण तक मौजूद नहीं है। परीक्षण के दौरान त्रुटियों से बचने के लिए ignoreResourceNotFound = true सेट करें और पढ़ने वाली संपत्ति पर एक डिफ़ॉल्ट मान जोड़ें (उदा। नीचे कोई भी)।  

@Service 
@PropertySource(value = "classpath:META-INF/maven/io.pivotal.poc.tzolov/hawq-rest-server/pom.properties", ignoreResourceNotFound=true) 
public class MyClass { 
    private String applicationPomVersion; 

    @Autowired 
    public MyClass(@Value("${version:none}") String applicationVersion) { 
     this.applicationPomVersion = applicationVersion; 
    } 

    public String getApplicationPomVersion() { 
     return this.applicationPomVersion; 
    } 
} 
0

मुझे लगता है कि आवेदन संस्करण इकट्ठा की सही तरीके से एक इस सूत्र में विस्तार से बताया है: getClass().getPackage().getImplementationVersion() के माध्यम से https://stackoverflow.com/a/2713013/840635

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