2010-07-12 14 views
44

पर सिस्टम प्रॉपर्टी निर्दिष्ट करें क्या कोई तरीका है (मेरा मतलब है कि मैं कैसे एक मैवेन प्रोजेक्ट में सिस्टम प्रॉपर्टी सेट करता हूं?मैवेन प्रोजेक्ट

मैं अपने परीक्षण और मेरे वेबपैप (स्थानीय रूप से चल रहा) से एक संपत्ति का उपयोग करना चाहता हूं और मुझे पता है कि मैं जावा सिस्टम प्रॉपर्टी का उपयोग कर सकता हूं।

क्या मुझे इसे ./settings.xml या उस तरह कुछ करना चाहिए?

प्रसंग

मैं एक ओपन सोर्स प्रोजेक्ट लिया और,

अब JavaDB उपयोग करने के लिए डाटाबेस विन्यास बदल करने में कामयाब रहे JavaDB के लिए JDBC यूआरएल में, डेटाबेस के स्थान के रूप में निर्दिष्ट किया जा सकता है पूरा पथ (देखें: this other question)

या एक प्रणाली संपत्ति: derby.system.home

मैं पहले से ही काम कर कोड है, लेकिन अभी यह सब है हार्डकोडेड रहे हैं:

jdbc:derby:/Users/oscarreyes/javadbs/mydb 

और मैं पूर्ण पथ निकालना चाहते हैं, यह पसंद छोड़ने के लिए:

jdbc:derby:mydb 

कि मैं प्रणाली संपत्ति (derby.system.home) maven को निर्दिष्ट करने की आवश्यकता करने के लिए, लेकिन मैं डॉन कैसे पता नहीं है।

परीक्षण जूनिट (मुझे pom.xml में कोई प्लगइन नहीं दिखता) का उपयोग करके किया जाता है और वेब ऐप जेट्टी प्लगइन के साथ चलता है।

कमांड लाइन में प्रणाली संपत्ति निर्दिष्ट घाट के लिए काम करने लगता है, लेकिन मुझे यकीन है कि अगर कुछ व्यावहारिक है नहीं कर रहा हूँ (दी कुछ अन्य उपयोगकर्ताओं ग्रहण से चला सकते हैं/विचार/जो कुछ भी)

+0

मैं बिल्कुल वैसा ही समस्या थी, जब मैं एकीकरण परीक्षणों (सिर्फ उन्हें नाम दिया और Maven-फेल सेफ-प्लगइन जोड़ा करने के लिए अपने परीक्षण ले जाया गया। इस प्रणाली संपत्ति काम करना बंद कर। मैं भी Maven-surefire- से systemPropertyVariables ले जाने के लिए किया था । प्लगइन इस Maven-फेल सेफ-प्लगइन में सिस्टम संपत्ति, Maven-अचूक-प्लगइन में विन्यस्त एकीकरण परीक्षणों के साथ नजरअंदाज कर दिया गया – Alexandr

उत्तर

51

क्या कोई तरीका है (मेरा मतलब है कि मैं कैसे एक मैवेन प्रोजेक्ट में सिस्टम प्रॉपर्टी सेट करता हूं? मैं अपने परीक्षण से एक संपत्ति का उपयोग करना चाहते हैं [...]

आप Maven Surefire Plugin विन्यास में सिस्टम गुण (यह समझ में आता है के बाद से परीक्षण डिफ़ॉल्ट रूप से काँटेदार कर रहे हैं) सेट कर सकते हैं। Using System Properties से:

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.5</version> 
     <configuration> 
      <systemPropertyVariables> 
      <propertyName>propertyValue</propertyName> 
      <buildDirectory>${project.build.directory}</buildDirectory> 
      [...] 
      </systemPropertyVariables> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

और मेरे webapp (स्थानीय स्तर पर चल रहा है)

सुनिश्चित नहीं हैं कि आप यहाँ क्या मतलब है, लेकिन मैं मान लेंगे webapp कंटेनर Maven द्वारा शुरू किया गया है।आप का उपयोग कमांड लाइन पर सिस्टम गुण पारित कर सकते हैं:

mvn -DargLine="-DpropertyName=propertyValue" 

अद्यतन: ठीक है, यह अब मिला है। जेटी के लिए, आपको मेवेन जेट्टी प्लगइन कॉन्फ़िगरेशन में सिस्टम गुण सेट करने में भी सक्षम होना चाहिए। Setting System Properties से:

<project> 
    ... 
    <plugins> 
    ... 
     <plugin> 
     <groupId>org.mortbay.jetty</groupId> 
     <artifactId>maven-jetty-plugin</artifactId> 
     <configuration> 
     ... 
     <systemProperties> 
      <systemProperty> 
       <name>propertyName</name> 
       <value>propertyValue</value> 
      </systemProperty> 
      ... 
     </systemProperties> 
     </configuration> 
     </plugin> 
    </plugins> 
</project> 
+0

मैं कमांड लाइन पर यह निर्दिष्ट करने में सक्षम था लेकिन मुझे वास्तव में पता नहीं है कि यह सबसे अच्छा तरीका है। मैं अपना मूल प्रश्न अपडेट करूंगा। औसत समय +1 – OscarRyz

+1

@ ऑस्कर मैं अब देखता हूं। जैसा कि मैंने लिखा, जुनीट परीक्षण एक फोर्कड वीएम में चलाएं ताकि आपको वास्तव में सुर में सिस्टम गुण सेट करना पड़े efire विन्यास। और मेवेन जेट्टी प्लगइन समान विन्यास सुविधाएं प्रदान करता है। मैं दोनों को कॉन्फ़िगर करने का सुझाव देता हूं, यह वास्तव में कमांड लाइन की तुलना में एक बेहतर विकल्प है। –

+0

मैंने सोचा कि हर कोई दिमाग पढ़ सकता है जैसा कि मैं करता हूं ... (बीटीडब्ल्यू सोचने से रोकें !!!) ... यह पूरी तरह से काम करता है। धन्यवाद !! – OscarRyz

2

अपने परीक्षण तो और वेबपैप एक ही मेवेन प्रोजेक्ट में हैं, आप प्रोजेक्ट पीओएम में एक संपत्ति का उपयोग कर सकते हैं। फिर आप कुछ फाइलों को फ़िल्टर कर सकते हैं जो मैवेन को उन फ़ाइलों में संपत्ति सेट करने की अनुमति देंगे। फ़िल्टर करने के विभिन्न तरीके हैं, लेकिन संसाधनों के दौरान सबसे आम है - http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-description.html

यदि परीक्षण और वेबपैप विभिन्न मेवेन प्रोजेक्ट्स में हैं, तो आप सेटिंग को .xml में रख सकते हैं, जो आपके मैवेन रिपोजिटरी फ़ोल्डर में है (सी: \ दस्तावेज़ और सेटिंग्स \ username.m2) विंडोज पर। आपको अपने परीक्षण और वेबपैप में संपत्ति को पढ़ने के लिए अभी भी फ़िल्टरिंग या कुछ अन्य विधि का उपयोग करने की आवश्यकता होगी।

+2

मैं वास्तव में एक प्रणाली संपत्ति के रूप में यह जरूरत है तो मैं 'System.getProperty (" myproperty ") प्रदर्शन कर सकते हैं;।' – OscarRyz

45

properties-maven-plugin प्लगइन मदद मिल सकती है:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>properties-maven-plugin</artifactId> 
    <version>1.0.0</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>set-system-properties</goal> 
      </goals> 
      <configuration> 
       <properties> 
        <property> 
         <name>my.property.name</name> 
         <value>my.property.value</value> 
        </property> 
       </properties> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+4

मुझे समझ में नहीं आ रहा है कि मैवेन-सिक्योरफायर-प्लगइन का उल्लेख उन चीजों के लिए क्यों किया जाता है जो परीक्षण से संबंधित नहीं हैं। ऐसा लगता है कि यह सामान्य विकास/तैनाती से पूरी तरह से अलग बात है, और मुझे conflation समझ में नहीं आता है। – jjpe

7

मैं सीखा है यह भी संभव है आप एक "स्टैंडअलोन" जावा एप्लिकेशन कर रहे हैं कार्यकारी-Maven-प्लगइन के साथ यह करने के लिए ।

  <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>${maven.exec.plugin.version}</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>java</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>${exec.main-class}</mainClass> 
       <systemProperties> 
        <systemProperty> 
         <key>myproperty</key> 
         <value>myvalue</value> 
        </systemProperty> 
       </systemProperties> 
      </configuration> 
     </plugin> 
संबंधित मुद्दे