2010-12-06 17 views
23

इंस्टॉल करने की आवश्यकता के बिना, एक बहु-मॉड्यूल मेवेन प्रोजेक्ट में चलाएं, मैं मेवेन के लिए नया हूं।मेवेन: जेटी का उपयोग कैसे करें:

Project (POM packaging) 
    | 
    +-- Module1 (JAR) 
    |  | 
    |  +-- src 
    |   | 
    |   +-- main 
    |    | 
    |    +-- java 
    |    +-- resources 
    | 
    +-- Module2 (JAR) 
    |  | 
    |  ... 
    | 
    +-- Web Module (WAR) 
     | 
     ... 

मैं Maven Jetty plugin शामिल करने के लिए वेब मॉड्यूल कॉन्फ़िगर कर दिया है: मैं एक बहु मॉड्यूल Maven 2 परियोजना निम्नलिखित संरचना (कुछ सरलीकृत) है कि है। यह उत्पादन कलाकृतियों के निर्माण के लिए बहुत अच्छा काम करता है। विकास के लिए, मैंने पाया कि मुझे बदलने वाले किसी भी मॉड्यूल पर mvn install पर कॉल करने की आवश्यकता है, इसके बाद जेटी को रोकना और जेटी को कॉल करना: फिर से चलाएं।
प्लगइन के लिए प्रत्येक मॉड्यूल की लक्षित निर्देशिकाओं से सीधे परिवर्तन करने का कोई तरीका होने पर यह अधिक उत्पादक होगा। जेटी प्लगइन दस्तावेज के मुताबिक ऐसी सुविधा प्रतीत होती है, लेकिन ऐसा लगता है कि यह केवल WAR मॉड्यूल पर लागू होता है।
मेरे लिए और भी महत्वपूर्ण है कि जेटी को पुनरारंभ करने की आवश्यकता के बिना, संसाधन फ़ाइलों में परिवर्तन करने में सक्षम होना चाहिए। ऐसा इसलिए है क्योंकि अधिकांश संसाधन HTML टेम्पलेट फ़ाइलें हैं, और यह परिवर्तन देखने के लिए पुनरारंभ करने की आवश्यकता के बिना विकास के दौरान टेम्पलेट्स को डिज़ाइन और अपडेट करने के लिए बहुत अधिक उत्पादक है।

तो, क्या स्थानीय भंडार में वास्तविक जेएआर के बजाय प्रत्येक जेएआर मॉड्यूल के लक्ष्य/कक्षाओं और संसाधन निर्देशिकाओं को शामिल करने के लिए जेटी प्लगइन के क्लासपाथ को सेट करने का कोई तरीका है?

धन्यवाद!
यानिव

+2

बहुत बढ़िया प्रश्न द्वारा जाँच नहीं का उपयोग करने और हल कार्यस्थान कलाकृतियों को विन्यस्त, द्वारा हल! मैं इसे भी समझ नहीं सकता। यदि आप इसे समझते हैं तो कृपया उत्तर यहां पोस्ट करें। –

उत्तर

7

यह बहु-मॉड्यूल मेवेन प्रोजेक्ट के साथ संभव नहीं है। मेवेन परियोजनाओं का एक मुख्य नियम यह है कि प्रत्येक परियोजना अकेले खड़े होने में सक्षम होना चाहिए। यह उन्हें एक साथ बनाए जाने से रोकता नहीं है, लेकिन किसी एक परियोजना को तब तक स्वयं बनाया जा सकता है जब तक कि इसकी सभी निर्भरताएं संतुष्ट न हों।

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

+5

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

+3

कोई भी तेजी से पुनरावृत्तियों के लिए मेवेन के साथ बनाता है। अपनी परियोजना को एक आईडीई में लोड करें ... इंटेलिजे आईडीईए, ग्रहण या नेटबीन्स सभी समझते हैं कि मैवेन प्रोजेक्ट्स को कैसे पार्स किया जाए, और यदि आपके पास विशेष प्लगइन्स नहीं हैं (या प्लगइन केवल विशिष्ट फाइलों के बाद चलने की आवश्यकता है), तो आप उन मुद्दों के रूप में कभी अनुभव न करें जिन्हें आप विशेष रूप से देखते हैं। –

+0

तो फिर आप एक वेब ऐप में तेजी से पुनरावृत्ति कैसे करते हैं? क्या आप "एमवीएन जेटटी: रन" के बजाय आईडीई में कुछ करते हैं? या मुझे लगता है कि जवाब मूल रूप से है कि आप एक वेब ऐप के लिए तेजी से पुनरावृत्ति नहीं कर सकते हैं और हर समय अपनी परियोजना को पुनर्स्थापित करने के माध्यम से पीड़ित होना पड़ता है? –

2

यदि आप एम 2 एक्लिप्स (ग्रहण के भीतर मेवेन के घनिष्ठ एकीकरण के लिए ग्रहण प्लग-इन) का उपयोग करते हैं, तो आप अपनी जेटी चला सकते हैं: वेब मॉड्यूल में रन लक्ष्य और अन्य निर्भरताओं को आपके कार्यक्षेत्र से ध्यान में रखा जाएगा, भले ही वे आपके स्थानीय भंडार में उपलब्ध नहीं हैं।

वर्कस्पेस में अपने मॉड्यूल को हल करने के लिए मेवेन को बताने के लिए आपके पास एक विकल्प है (डिफ़ॉल्ट रूप से, यह केवल स्थानीय भंडार में तैनात किया जाएगा)।

दुर्भाग्यवश, मेरे पास आईडीईए में एक ही व्यवहार नहीं हो सकता है और मुझे जेटी चलाने से पहले इंस्टॉल करना है: वेब मॉड्यूल पर चलाएं।

+2

क्या यह सच है? मैं इसे काम नहीं कर सकता। देखें: http://stackoverflow.com/questions/5571442/how-to-get-maven-plugin-to-use-eclipse-workspace-resolution – ccleve

3

ग्रहण में, आप इसे प्राप्त करने के लिए "रन जेटी" प्लगइन का उपयोग कर सकते हैं।
आईडीईए के रन कॉन्फ़िगरेशन में, 'वर्कस्पेस कलाकृतियों को हल करें' विकल्प है, इसे जांचें।

1

इस उत्तर के आधार पर: Best practice wrt. `mvn install`, multi-module projects, and running one submodule आसपास मावेंस भयानक प्रतिबंध और रिएक्टर सीमाओं एक समाधान के सच को छोड़ के साथ माता-पिता पोम में प्लगइन को परिभाषित करने के लिए है, और उसके बाद संबंधित submodule झूठी छोड़ का उपयोग करने में यह पुन: सक्षम।

1

मैं एक Maven लांचर है कि डिफ़ॉल्ट enter image description here

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