2013-04-29 9 views
5

में विभिन्न परीक्षण क्षेत्रों की आर्टिफैक्ट पीढ़ी के लिए मेवेन और विभिन्न एप्लिकेशन.प्रोपर्टीज का उपयोग कैसे करें मैं विभिन्न स्थानीय और परीक्षण क्षेत्रों के लिए आर्टिफैक्ट पीढ़ी को संभालने के लिए मेवेन का उपयोग करना चाहता हूं। मुझे विश्वास है कि मैं विभिन्न प्रोफाइल का उपयोग कर सकता हूं लेकिन मैं निश्चित नहीं हूं।स्प्रिंग कॉन्फ़िगर किए गए ऐप

मैवेन में क्या मैं पैकेजिंग (जैसे application.properties) पर उपयोग की जाने वाली फ़ाइलों का चयन करने के लिए विभिन्न निर्देशिकाओं का चयन कर सकता हूं? मैं इसे कैसे स्थापित करूं?

जो मैं चाहता की एक विचार अपने प्रोजेक्ट

  • स्थानीय
  • बिल्ड सर्वर
  • देव
  • sys
  • prod में संसाधनों के लिए एक निम्न फ़ोल्डर है

प्रत्येक फ़ोल्डर में एक भिन्न होना चाहिए application.resources का nt संस्करण जो स्प्रिंग में एक फ़ाइल है जिसे चर में उपयोग के लिए हार्ड-कोडेड तारों को संभालने के लिए उपयोग किया जा सकता है। स्थानीय निर्माण के लिए- हमारे डेवलपर विभिन्न ऑपरेटिंग सिस्टम पर भी काम करते हैं। क्या मुझे इसकी आवश्यकता होनी चाहिए कि मैं इसे विभिन्न ओएस पर भी निर्बाध बनाना चाहता हूं।

कुंजी परिणामों होगा:

  • नियंत्रण Maven lifecycle phases आईडीई अंदर से (इंटेलीजे)
  • चरणों को मुश्किल नहीं है और टीम प्रक्रियाओं
  • हर डेवलपर
  • के लिए संगत के रूप में बातों का ध्यान रखें अलग विन्यास बनाओ प्रति चरण जैसे चलने पर प्रति डेवलपर/क्षेत्र अदृश्य दिखाई देता है

आदर्श रूप से मेरा प्रोजेक्ट best practices (Duvall, Matyas, Glover) के अनुसार स्थापित होगा।

+1

उपयोग Maven प्रोफाइल (http://maven.apache.org/guides/introduction/introduction-to-profiles.html) और संसाधनों फिल्टरिंग (http: // Maven आपको यह फ़ाइल इस प्रकार बना सकते हैं। apache.org/plugins/maven-resources-plugin/examples/filter.html) – willome

उत्तर

4

हम वर्तमान में विभिन्न गुण प्रदान करते हैं लेकिन विभिन्न फ़ोल्डरों के माध्यम से नहीं। हम

  • वसंत के PropertyPlaceholderConfigurer
  • Maven प्रोफाइल (कुछ हम अपने देव वातावरण का निर्माण करने के लिए उपयोग करें),
  • बिल्ड सर्वर (हमारे मामले में TeamCity)
  • Maven चरणों का उत्पादन करने का एक मिश्रण के माध्यम से इस करना सही विरूपण साक्ष्य
  • स्टार्ट-अप और निर्माण तर्क

हम क्या कर के मेरे समझ एल है अनुकरण किया, लेकिन उम्मीद है कि यह दूसरों के लिए एक उपयोगी उदाहरण के रूप में कार्य करता है और शायद खुद पर विचार करने के लिए।

हम पैरामीटर प्रदान करते हैं, जैसा कि आप नीचे देखेंगे, विभिन्न संपत्ति फ़ाइलों को इंगित करने के लिए। प्रत्येक प्रॉपर्टी फ़ाइल में किसी क्षेत्र/पर्यावरण के लिए कॉन्फ़िगरेशन है। मैं मौजूदा उपयोग की व्याख्या करूंगा जैसा कि मैं कर सकता हूं, अगर यह दूसरों के लिए कुछ उपयोग प्रदान करता है।

मैवेन प्रोफाइल का उपयोग करने के लिए हमने को हमारे पोम में development के रूप में पहचाना है जिसमें env नामक एक क्षेत्र कॉन्फ़िगरेशन प्रॉपर्टी शामिल है। मैं अभी तक पूरी तरह से नहीं जानता कि इसका उपयोग अभी तक हमारे प्रोजेक्ट में कैसे किया जा रहा है, हालांकि आप नीचे देखेंगे कि हमारे पीओएम में एक मेवेन कंपाइलर प्लगइन और मैवेन टॉमकैट प्लगइन शामिल है।

दिन-प्रतिदिन, डेवलपर्स के रूप में हम इंटेलिजे के भीतर से टॉमकैट पर स्थानीय रूप से हमारे आवेदन चलाते हैं और env संपत्ति प्रदान करते हैं। स्टार्ट-अप पर env संपत्ति पर classpath*:dev-common.properties पर तर्क के रूप में प्रदान की जाती है। यह फ़ाइल एक गुण कॉन्फ़िगरेशन फ़ाइल है - हमारे अलग-अलग क्षेत्रों के लिए प्लेसहोल्डर मान सेट करना।

हमारे पोम में एक profile के कार्यान्वयन है:

pom.xml में Maven profile का कार्यान्वयन -

env का मूल्य हमारे PropertyPlaceholderConfigurer


उदाहरण 1 उपलब्ध कराया जाता है

<profile> 
     <id>development</id> 
     <activation> 
      <property> 
       <name>env</name> 
       <value>development</value> 
      </property> 
     </activation> 
     <build> 
      <pluginManagement> 
       <plugins> 
        <plugin> 
         <artifactId>maven-compiler-plugin</artifactId> 
         <version>2.3.2</version> 
         <configuration> 
          <source>1.6</source> 
          <target>1.6</target> 
         </configuration> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.tomcat.maven</groupId> 
         <artifactId>tomcat7-maven-plugin</artifactId> 
         <version>2.0-SNAPSHOT</version> 
      ... 
        </plugin> 
       </plugins> 
      </pluginManagement> 
     </build> 
    </profile> 

उदाहरण 2 - संपत्ति सामान्य निर्माण के लिए प्लेसहोल्डर configurer:

हम भी उपयोग OFA स्प्रिंग घटक बनाने के एक PropertyPlaceholderConfigurer। संसाधन संसाधनों में क्लासपाथ पॉइंटर सेट अप करने के लिए हम बिल्ड निर्माण के सहयोग से इसका उपयोग करते हैं।

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value> 
       ${env} 
      </value> 
     </list> 
    </property> 


उदाहरण 3 - परीक्षण के लिए संपत्ति प्लेसहोल्डर configurer:

हम वसंत संदर्भ विशेष रूप से एकीकरण परीक्षण जो भी PropertyPlaceholderConfigurer का उपयोग के लिए स्थापित की है। इन्हें @ContextConfiguration(locations = {"classpath:test-dataexchange-application-context.xml"}) और @RunWith(SpringJUnit4ClassRunner.class) के संयोजन का उपयोग करके एकीकरण परीक्षण कक्षा द्वारा उठाया जाता है)।

परीक्षण संदर्भ हम PropertyPlaceholderConfigurer कॉन्फ़िगर के रूप में एक एकीकरण परीक्षण क्षेत्र के गुणों को लेने के लिए इस प्रकार है:

<bean id="testpropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>classpath*:dev-local-common.properties</value> 
     </list> 
    </property> 


अन्य नोट:

हम बिल्ड प्रबंधन के लिए टीम सिटी का उपयोग करें लेकिन मैंने नहीं देखा है कि ये सेटिंग्सकैसे हैंवहां उपयोग किया जाता है, अगर वे बिल्कुल हैं। मैं कल्पना कर सकता हूं कि निरंतर एकीकरण और वितरण की सहायता के लिए उपरोक्त दृष्टिकोणों को एक साथ जोड़ने की क्षमता है।

मुझे नहीं पता कि प्रोफ़ाइल को development के रूप में पहचाना जा रहा है।यह कुछ है Iमेरे साथी टीम के सदस्यों के साथ पालन करना होगा।


संसाधन:

  • Maven परियोजना स्थल पर Building for different environments
  • Maven 3 एक पोम या settings.xml (Maven विन्यास फाइल) के एक profile बाहर के विन्यास की अनुमति नहीं है और है कि उपयोगकर्ताओं को जो इन बाहरी सेटिंग्स should now put them inside of settings.xml इस्तेमाल किया
1

उद्देश्य प्रत्येक परिवेश के लिए एक विरूपण साक्ष्य उत्पन्न करने के लिए कहते हैं केंद्रीय सर्वर (सीआई/बिल्ड सर्वर) पर एक समय में, एक विरूपण साक्ष्य उत्पन्न करने के लिए और शुरू/स्थानीय स्तर पर एक क्लिक के साथ आवेदन का परीक्षण की जाँच और अपने निर्माण को चलाने के लिए जिस तरह से जानने के लिए एक सुसंगत आसान प्रदान करते हैं और में जाँच करें और कॉन्फ़िगर उद्देश्य आपका सीआई

आप Maven में प्रोफ़ाइल का उपयोग और सही एक बिल्ड सर्वर जो हमारे मामले में TeamCity है का उपयोग करते हुए निर्माण को प्राप्त करने के Maven लक्ष्य का उपयोग कर सकते हैं।

स्प्रिंग संदर्भ में संपत्ति प्लेसहोल्डर कॉन्फ़िगरर का उपयोग प्रत्येक क्षेत्र के लिए application.resources फ़ाइल और फ़ाइल नाम मुखौटा के साथ करें। application-resources-${region}

3

आप स्प्रिंग बूट का उपयोग कर रहे हैं, तो वहाँ ऐसा करने का एक आसान तरीका है।

Maven में दो प्रोफ़ाइल बनाएं और स्प्रिंग प्रोफाइल आप निष्पादित करने के लिए चाहते हैं उसका नाम के साथ प्रत्येक प्रोफ़ाइल में एक गुण सेट।

<profile> 
     <id>dev</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <!-- Default spring profile to use --> 
      <spring.profiles.active>dev</spring.profiles.active> 
      <!-- Default environment --> 
      <environment>develop</environment> 
     </properties> 
    </profile> 

अपने application.properties के अंदर, इस संपत्ति जोड़ें: spring.profiles.active = $ {spring.profiles.active}

प्रत्येक प्रोफ़ाइल के लिए एक application.property बनाएं, इस पद्धति का उपयोग कर आवेदन के profile.properties। उदाहरण के लिए: application-dev.properties application-prod.properties

संसाधन प्लगइन में सक्रिय छानने करना सुनिश्चित करें:

... 
    <resource> 
    <directory>src/main/resources</directory> 
    <filtering>true</filtering> 
    </resource> 
... 

एक और तरीका है Maven बुलाया activeprofile के निष्पादन के दौरान एक फ़ाइल बनाने के लिए है ।गुण। वसंत बूट सक्रिय फ़ाइल लोड करने के लिए इस फ़ाइल को दिखता है।

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>prepare-package</phase> 
        <configuration> 
         <target> 
          <echo message="spring.profiles.active=${spring.profiles.active}" file="target/classes/config/activeprofile.properties" /> 
         </target> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
      </configuration> 
     </plugin> 
संबंधित मुद्दे