2011-03-12 12 views
14

मैं एक परियोजना है कि एक जार फ़ाइल अपने प्रोजेक्ट के WEB-INF/lib निर्देशिका में शामिल निर्दिष्ट करने के लिए "प्रणाली" गुंजाइश का उपयोग करता है। यह आर्टिफैक्ट किसी भी मेवेन रिपॉजिटरीज़ में नहीं है, इसलिए मुझे इसे अपनी परियोजना के हिस्से के रूप में शामिल करना होगा। मैं निम्नलिखित के साथ ऐसा करता हूं:मेवेन निष्पादन प्लगइन- "सिस्टम" क्लासपाथ कैसे शामिल करें?

<dependency> 
     <groupId>com.example</groupId> 
     <artifactId>MySpecialLib</artifactId> 
     <version>1.2</version> 
     <scope>system</scope> 
     <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/MySpecialLib-1.2.jar</systemPath> 
    </dependency> 

यह ज्यादातर चीजों के लिए बहुत अच्छा काम करता है।

लेकिन अब मैं (, मेरे webapp के बाहर एक main() विधि मैं जोड़ लिया है के माध्यम से) कमांड लाइन पर कुछ कोड को चलाने के लिए कोशिश कर रहा हूँ और क्योंकि यह "क्रम" में शामिल नहीं किया mvn exec:java MySpecialLib में कोड को हल नहीं कर सकते classpath।

मैं कैसे या तो कर सकते हैं:

क्रम classpath को
  • ऐड MySpecialLib

या

  • mvn exec:java बता भी system classpath उपयोग करने के लिए?

मैंने mvn exec:java -Dexec.classpathScope=system की कोशिश की है, लेकिन यह runtime पर मौजूद सभी चीज़ों को छोड़ देता है।

उत्तर

1

दिलचस्प पता चला है कि classpathScope=system चला जाता है runtime निर्भरता। मैं एक विकल्प के रूप pom.xml कार्य करने का एक plugin के रूप में शामिल करके कि पाया। क्या आप कृपया कोशिश कर सकते हैं और मुझे बता सकते हैं कि यह आपके लिए भी काम करता है?

तो मैं जैसे आप अपने विरूपण साक्ष्य के लिए है एक उदाहरण के रूप कॉमन्स-संग्रह करने के लिए एक प्रणाली के स्तर निर्भरता कहा: -

<dependency> 
     <groupId>commons-collections</groupId> 
     <artifactId>commons-collections</artifactId> 
     <version>3.0</version> 
     <scope>system</scope> 
     <systemPath>C:\\<some_path>\\commons-collections-3.0.jar</systemPath> 
    </dependency> 

फिर <build> टैग में मैं install चरण में exec-maven-plugin प्लगइन है निष्पादित किया जाना है : -

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.1</version> 
    <executions> 
    <execution> 
    <phase>install</phase> 
    <goals> 
     <goal>java</goal> 
    </goals> 
    <configuration> 
     <mainClass>com.stackoverflow.test.App</mainClass> 
    </configuration> 
    </execution> 
    </executions> 
    </plugin> 

तब मैं mvn install भाग गया। मैं यह भी सुनिश्चित करें com.stackoverflow.test.App वर्ग कुछ कोड है कि commons-collections-3.0 से एक वर्ग का आह्वान किया है बनाया है।

उम्मीद है कि इससे मदद मिलती है।

0

सही जवाब Maven: स्थापित-प्लगइन का उपयोग और अपने स्थानीय रेपो में जार रखो है। या, बेहतर अभी तक, नेक्सस या आर्टिफैक्टरी चलाएं और जार को वहां रखने के लिए तैनाती प्लगइन का उपयोग करें। सिस्टम क्लासपाथ सिर्फ चोट की दुनिया है।

+2

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

+0

मैंने मेकफ़ाइल लिखी हैं जो स्थानीय रेपो में इसे अविस्मरणीय बनाने के लिए इंस्टॉल करते हैं। इसके अलावा, नि: शुल्क नेक्सस एक छोटा हथौड़ा है जो मेरे विचार में उपयोगी सुविधाओं का भरपूर धन प्रदान करता है। – bmargulies

13

उपयोग Maven कार्यकारी प्लग इन चलाना-क्षेत्र 'के संकलन' - mvn exec:java -Dexec.classpathScope=compile। इसमें सिस्टम-स्कोप्ड निर्भरता शामिल होगी।

0

उदा इंगित किया गया है कि समाधान निष्पादित करते समय संकलन स्कोप का उपयोग करना है।

प्रत्येक मंगलाचरण पर:

mvn exec:java -Dexec.classpathScope=compile 

या सीधे कार्यकारी-प्लगइन-विन्यास में:

 <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     ... 
     <configuration> 
       <classpathScope>compile</classpathScope> 
     </configuration> 
    </plugin> 
संबंधित मुद्दे