मावेन: कमांड लाइन से डायरेक्टरी को टारगेट में कैसे बदलें?


82

मावेन: कमांड लाइन से डायरेक्टरी को टारगेट में कैसे बदलें?

(मैं कुछ मामलों में एक और लक्ष्य निर्देशिका का उपयोग करना चाहता हूं)


इसी तरह के सवाल stackoverflow.com/questions/13173063/…
gavenkoa

2
सरल उत्तर: मेरे पास एक आईडीई है जैसे कि ग्रहण भवन में target/, और मैं एक दूसरे के पैर की उंगलियों पर कदम रखने वाली दो प्रक्रियाओं के बिना कमांड लाइन से निर्माण करने में सक्षम होना चाहता हूं।
जॉन सुलिवन

एक अन्य उपयोग का मामला जो मैंने इसके लिए पाया है - स्रोत पेड़ में src/it/my-integration-test-project/pom.xmlएक targetनिर्देशिका बनाए बिना कमांड लाइन से एकीकरण परीक्षण का निर्माण करना, जो उस समय कॉपी हो जाएगा जब एकीकरण परीक्षण युक्त परियोजना के सत्यापित चरण के हिस्से के रूप में चलाए जाएंगे।
माइक सैमुअल

1
क्या इससे आपके सवाल का जवाब मिलता है? मावेन के साथ आउट-ऑफ-ट्री बिल्ड। क्या यह संभव है?
030

जवाबों:


93

आपको प्रोफाइल का उपयोग करना चाहिए।

<profiles>
    <profile>
        <id>otherOutputDir</id>
        <build>
            <directory>yourDirectory</directory>
        </build>
    </profile>
</profiles>

और अपने प्रोफाइल के साथ मावेन शुरू करें

mvn compile -PotherOutputDir

यदि आप वास्तव में कमांड लाइन से अपनी निर्देशिका को परिभाषित करना चाहते हैं तो आप ऐसा कुछ कर सकते हैं ( अनुशंसित बिल्कुल नहीं ):

<properties>
    <buildDirectory>${project.basedir}/target</buildDirectory>
</properties>

<build>
    <directory>${buildDirectory}</directory>
</build>

और इस तरह संकलित करें:

mvn compile -DbuildDirectory=test

ऐसा इसलिए है क्योंकि आप लक्ष्य निर्देशिका को बदलकर उपयोग नहीं कर सकते -Dproject.build.directory


1
आपका बहुत बहुत धन्यवाद। दूसरे समाधान की सिफारिश क्यों नहीं की गई है?
इगोर मुखिन

1
@ आईमुहिन, पहला समाधान मावेन कॉन्फ़िगरेशन द्वारा दी गई संभावनाओं का सही उपयोग है, दूसरा काम करने के लिए एक चाल है। यदि विकल्पों -Dproject.build.directoryका उपयोग किया जाना था, तो यह प्रयोग करने योग्य होगा; और यह -Dproject.build.directoryसमस्या के लिए एक समाधान है। पहले समाधान के साथ, आप एक बार और सभी के लिए पथ निर्दिष्ट करते हैं, आप कमांड लाइन लॉन्च करते समय डायरेक्टरी नाम में एक टाइपो नहीं कर सकते हैं, आप आसानी से इस समाधान का उपयोग कर सकते हैं, भले ही आप आईडीई, आदि से काम करते हों
कॉलिन हेबर्ट

8
प्रोफाइल समाधान के साथ समस्या यह है कि लक्ष्य निर्देशिका को बदलने के लिए उपयोग के कई मामले उपयोगकर्ता-विशिष्ट हैं (जैसे कि राम डिस्क बनाना चाहते हैं) और पोम में शामिल नहीं हैं। उपयोगकर्ता-विशिष्ट सेटिंग्स में प्रोफाइल। xml में एक बिल्ड तत्व नहीं हो सकता है, इसलिए यह एक विकल्प नहीं है।
एरिकस जूल

मुझे यह उत्तर बहुत पसंद है, लेकिन शायद इसमें शामिल है कि आप settings.xmlकमांड लाइन के बजाय प्रोफाइल को सक्रिय कर सकते हैं , और भी अधिक पोर्टेबिलिटी के लिए?
दुष्ट

1
मुझे आपका "अनुशंसित समाधान नहीं" पसंद है क्योंकि इसने मुझे वैकल्पिक निर्देशिकाओं में कमांड लाइन पर निर्माण करने में सक्षम किया है, इस प्रकार ग्रहण को परेशान किए बिना जो डिफ़ॉल्ट $ {project.basedir} / लक्ष्य को इंगित करता है। इसलिए मैं ग्रहण की प्रतीक्षा करने के लिए एक ही समय में कमांड लाइन पर निर्माण कर सकता हूं ताकि ग्रहण के ताज़ा / पुनर्निर्माण के लिए इंतजार न किया जा सके
फ्रेंकोइस मारोट

28

कॉलिन सही है कि एक प्रोफ़ाइल का उपयोग किया जाना चाहिए। हालाँकि, उनका उत्तर प्रोफ़ाइल में लक्ष्य निर्देशिका को हार्ड-कोड करता है। एक वैकल्पिक समाधान इस तरह से एक प्रोफ़ाइल जोड़ना होगा:

    <profile>
        <id>alternateBuildDir</id>
        <activation>
            <property>
                <name>alt.build.dir</name>
            </property>
        </activation>
        <build>
            <directory>${alt.build.dir}</directory>
        </build>
    </profile>

ऐसा करने से बिल्ड निर्देशिका को बदलने का प्रभाव होगा। जो भी alt.build.dir संपत्ति द्वारा दी गई है, जो कि POM में, उपयोगकर्ता की सेटिंग में या कमांड लाइन पर दी जा सकती है। यदि संपत्ति मौजूद नहीं है, तो संकलन सामान्य लक्ष्य निर्देशिका में होगा।


N00b प्रश्न के लिए क्षमा करें, लेकिन इसके लिए उपयोगकर्ता की सेटिंग फ़ाइल में गुण सेट करने का उपयुक्त तरीका क्या है? मैं सेटिंग्स संदर्भ से समझता हूं कि सेटिंग फ़ाइल में सेट किए गए गुणों को सेटिंग फ़ाइल में इंटरपोल नहीं किया जाएगा।
माइकल स्काइपर

इसके अलावा, इस ऑफर का क्या फायदा होगा? मैं शायद कुछ याद कर रहा हूं, लेकिन यह मानते हुए कि ओपी के 'मामले' कमांड लाइन पर निर्दिष्ट हैं, क्या यह सिर्फ पैरामीटर -Dalt.build.dir=~/mytargetको -Dकुछ अन्य संपत्ति के लिए उपयोग करने के बराबर नहीं करेगा ?
माइकल शेपर

आह, मैंने अभी महसूस किया है कि यहाँ हर कोई POM में प्रोफाइल जोड़ने के बारे में बात कर रहा है, न कि settings.xml। यह कम से कम n00b के रूप में m00t के रूप में मेरे सवाल करना होगा। उसके लिए माफ़ करना।
माइकल शेपर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.