2016-02-10 8 views
7

मैं निम्नलिखित माता पिता pom.xml फ़ाइल है:एक जनक प्रोफ़ाइल से एक बच्चे की प्रोफाइल सक्रिय कर रहा है

<profile> 
    <id>build_full</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <modules> 
     <module>mymodule_interface</module> 
     <module>mymodule_switch</module> 
     <module>mymodule_switch_simulator</module> 
     <module>mymodule_switch_controller</module> 
     <module>mymodule_server</module> 
    </modules> 
</profile> 

और mymodule_server के लिए अपने बच्चे को पोम में, मैं निम्नलिखित है:

<profile> 
    <id>subprofile</id> 
    <modules> 
     <module>...various modules...</module> 
    </modules> 
</profile> 
<profile> 
    <id>default</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <modules> 
     <module>...various modules...</module> 
    </modules> 
</profile> 

कैसे, जब मैं मेवेन का आह्वान करें: mvn -P build_full, क्या मैं default के बजाय प्रोफाइल subprofile का उपयोग करने के लिए बाल मॉड्यूल (mymodule_server) को मजबूर कर सकता हूं?

उत्तर

4

नहीं, आप किसी मूल प्रोफ़ाइल से बच्चे प्रोफ़ाइल को सक्रिय नहीं कर सकते हैं। अधिक आम तौर पर, you can't activate or deactivate any profile from any other profile (एक जिरा सुविधा-अनुरोध MNG-3309 है)। आप क्या कर सकते हैं activate two profiles based on the same property है।

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

एक नमूना कॉन्फ़िगरेशन निम्न होगा, जहां fullBuild सिस्टम प्रॉपर्टी true पर सेट होने पर दोनों प्रोफाइल सक्रिय होते हैं। mvn -DfullBuild=true ... के साथ मेवेन को आमंत्रित करने से प्रोफाइल दोनों सक्रिय हो जाएंगे।

<profile> 
    <id>build_full</id> 
    <activation> 
     <property> 
      <name>fullBuild</name> 
      <value>true</value> 
     </property> 
    </activation> 
    <modules> 
     <module>mymodule_interface</module> 
     <module>mymodule_switch</module> 
     <module>mymodule_switch_simulator</module> 
     <module>mymodule_switch_controller</module> 
     <module>mymodule_server</module> 
    </modules> 
</profile> 
<profile> 
    <id>subprofile</id> 
    <activation> 
     <property> 
      <name>fullBuild</name> 
      <value>true</value> 
     </property> 
    </activation> 
    <modules> 
     <module>...various modules...</module> 
    </modules> 
</profile> 
+0

मैं बस अपना जवाब पोस्ट करने से पहले स्थानीय स्तर पर परीक्षण किया है, मैं शायद एक गलती है, वाला फिर से परीक्षण यह तो –

+0

@ A.DiMatteo यह जब जनक पोम से चल रहा काम करना चाहिए बनाया है। आपके समाधान को भी काम करना चाहिए, लेकिन मैं सभी '-P' पैरामीटरों (मुझे लगता है कि यह बहुत नाजुक है) – Tunaki

+1

मैं पुष्टि करता हूं कि दोनों समाधान अच्छी तरह से काम करते हैं। वास्तव में आपका प्रस्ताव कमांड लाइन से कम वर्बोज़ है और एक सामान्य स्थान पर सक्रियण को बेहतर बनाता है। –

2

आपके मामले में, शीर्ष माता-पिता/एग्रीगेटर फ़ोल्डर से, आप बस चला सकते हैं:

mvn clean install -Pbuild_full,!default,subprofile 

यह (और इसलिए चिंतित उप मॉड्यूल में प्रोफ़ाइल को अक्षम) किसी भी प्रोफ़ाइल होने का नाम default को निष्क्रिय कर देगा और किसी भी प्रोफ़ाइल को subprofile नाम से सक्षम करें (और इसलिए आप जिस प्रोफाइल को चाहते थे उसे सक्षम करें)।

वैकल्पिक रूप से, आप इस तरह के रूप subprofile कॉन्फ़िगर कर सकते हैं:

<profiles> 
    <profile> 
     <id>subprofile</id> 
     <activation> 
      <property> 
       <name>subprofile</name> 
       <value>true</value> 
      </property> 
     </activation> 
     .... 

और फिर निम्न के रूप में चलाने:

mvn clean install -Dsubprofile=true -Pbuild_full 

यह वही प्रभाव पड़ेगा। आप value तत्व से भी बच सकते हैं और बस -Dsubprofile निर्दिष्ट कर सकते हैं, इसका अस्तित्व प्रोफ़ाइल को सक्रिय करने के लिए पर्याप्त होगा (उस स्थिति में -DactivateSubprofile जैसे अधिक अर्थपूर्ण नाम सुझाए गए हैं)। चूंकि आप एक अलग प्रोफ़ाइल सक्रिय करते हैं, स्वचालित रूप से मैवेन डिफ़ॉल्ट को निष्क्रिय कर देगा।

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