2010-11-05 10 views
17

मैं अपनी तैनाती प्लगइन के लिए अपने ~/.m2/settings.xml में परिभाषित गुणों के माध्यम से सर्वर को पासवर्ड परिभाषित करता हूं (हालांकि, कहीं भी हो सकता है, pom.xml सहित)। मैं अपने एकीकरण परीक्षणों के लिए एक ही गुण का उपयोग करना चाहता हूं। क्या ऐसा करने का कोई तरीका है?क्या मैं अपने स्प्रिंग कंटेनर में मेवेन (सेटिंग्स.एक्सएमएल में परिभाषित पासवर्ड) से गुण इंजेक्ट कर सकता हूं?

यदि नहीं, तो क्या मैवेन और टेस्टएनजी के बीच संपत्तियों को साझा करने का एक सुविधाजनक तरीका है?

मैं एक अच्छा परीक्षण सूट लिखना चाहता हूं जो विभिन्न निरंतर एकीकरण सर्वरों पर चल सकता है, जो कोड के संशोधन के बिना विभिन्न दूरस्थ होस्ट (विकास, परीक्षण, स्टेजिंग और उत्पादन) को इंगित करता है।

मैं settings.xml में एक दूरस्थ सेवा के लिए साख को परिभाषित कर रहा हूँ:

<properties> 
<my.host>http://my.company.com</my.host> 
<my.username>my-un</my.username> 
<my.password>my-pw</my.password> 
</properties> 

मैं अपने इकाई में गुण संदर्भित करने के लिए सक्षम होने के लिए करना चाहते हैं/एकीकरण परीक्षणों (src/परीक्षण/संसाधन) का उपयोग:

<?xml version="1.0" encoding="UTF-8"?> 
<beans.... 
    <bean class="java.lang.String" id="un"> 
     <constructor-arg value="${my.username}"/> 
    </bean> 
    <bean class="java.lang.String" id="pw"> 
     <constructor-arg value="${my.password}"/> 
    </bean> 
</beans> 

क्या ऐसा करने के लिए कोई विकल्प हैं? क्या किसी और ने इससे पहले कोशिश की है? मैं बहुत सारे आरईएसटी परीक्षण लिख रहा हूं जिसके लिए मेरे परीक्षणों में प्राधिकरण की आवश्यकता है।

धन्यवाद!

उत्तर

1

मैवेन आपके एक्सएमएल फ़ाइल में एक विशेष मूल्य को प्रतिस्थापित करने के लिए प्राप्त कर सकता है जब मैवेन एक निश्चित प्रोफ़ाइल के साथ आपकी परियोजना बनाता है। तो उदाहरण के लिए आप अपने मेवेन पोम में एक टेस्ट प्रफाइल सेट अप करेंगे और जब आप उस प्रोफाइल के साथ निर्माण करेंगे तो आपके जार में एक्सएमएल फाइल में वांछित संपत्ति होगी। उदाहरण के लिए this पर देखें।

31

निश्चित रूप से। Maven resource filtering जाने का रास्ता है।

यहां एक नमूना विन्यास है (, *-context.xml मिलान फ़ाइलें फ़िल्टर कर दिया जाएगा दूसरों नहीं होगा):

<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <includes> 
       <include>**/*-context.xml</include> 
      </includes> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>false</filtering> 
      <excludes> 
       <exclude>**/*-context.xml</exclude> 
      </excludes> 
     </resource> 
    </resources> 
</build> 

एक अलग दृष्टिकोण का उपयोग कर स्प्रिंग से Properties Maven Pluginwrite all project properties to a file के लिए और संदर्भ है कि फ़ाइल का उपयोग किया जाएगा the PropertyPlaceholderConfigurer mechanism

Maven विन्यास:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>properties-maven-plugin</artifactId> 
      <version>1.0-alpha-2</version> 
      <executions> 
       <execution> 
        <phase>generate-test-resources</phase> 
        <goals> 
         <goal>write-project-properties</goal> 
        </goals> 
        <configuration> 
         <outputFile>${project.build.testOutputDirectory}/mavenproject.properties</outputFile> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

स्प्रिंग विन्यास:

<context:property-placeholder location="classpath:mavenproject.properties"/> 
+0

सही उत्तर +1 –

+0

+1 दस्तावेज़ों को पढ़ने के बाद मैं वास्तव में जो खोज रहा था। प्रारंभ में यह सोचकर अनदेखा किया कि "फ़िल्टरिंग" कुछ और है। – marklai

+1

आपके वर्कफ़्लो के आधार पर जोखिम है, कि ये गुण, विशेष रूप से पासवर्ड, आपके निर्माण में दिखाए जाते हैं, उदा। एक सीआई पर्यावरण में। –

5

खैर, @seanizer सही रास्ते पर है, लेकिन इस सरल किया जा सकता क्योंकि आप पहले से ही Maven में अपने गुणों को सेट कर सकते हैं। उन्हें अपने पोम में और अपनी स्प्रिंग कॉन्फ़िगरेशन में सेट करें, आपको केवल उन तक पहुंच प्राप्त करने की आवश्यकता है, इसलिए बस इस तरह की कॉन्फ़िगरेशन को बदलना इसे पूरा करेगा।

<beans.... 
    <context:property-placeholder /> 

    <bean class="java.lang.String" id="un"> 
     <constructor-arg value="${my.username}"/> 
    </bean> 
    <bean class="java.lang.String" id="pw"> 
     <constructor-arg value="${my.password}"/> 
    </bean> 
</beans> 

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

मैं उन्हें अपने वर्तमान स्थान से ले जाऊंगा, हालांकि यह एक वैश्विक सेटिंग है, आपका पोम प्रोजेक्ट विशिष्ट है इसलिए मुझे लगता है कि यह कहां से संबंधित है।

+1

यह भी काम करता है (+1), लेकिन केवल तभी परीक्षणों को फोर्क नहीं किया जाता है। –

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

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