2008-09-24 29 views
15

मैं एक कस्टम maven2 मोजो लिख रहा हूँ। मुझे इस MOJO से, किसी अन्य प्लगइन की रनटाइम कॉन्फ़िगरेशन तक पहुंचने की आवश्यकता है।सबसे अच्छा तरीका है?

ऐसा करने का सबसे अच्छा तरीका क्या है?

उत्तर

0

मैं कैसे आपको लगता है कि वास्तव में क्या करना होगा यकीन नहीं है, लेकिन मुझे लगता है कि यह सबसे अच्छा डिजाइन निर्णय नहीं हो सकता है। यदि संभव हो तो आपको अपने मोजो को किसी भी अन्य प्लगइन से बाहर निकालना चाहिए।

इसके बजाय मैं कस्टम गुण का उपयोग कर अलग प्लगइन्स के विन्यास में किसी भी दोहराव को अलग करने के लिए सिफारिश करेंगे।

आप गुण अनुभाग का उपयोग करके कोई कस्टम गुण "foo" अपने पोम में सेट कर सकते हैं:

<project> 
    ... 
    <properties> 
    <foo>value</foo> 
    </properties> 
    ... 
</project> 

संपत्ति foo डॉलर चिह्न + घुंघराले ब्रेस संकेतन का उपयोग करके पोम में कहीं भी अब पहुँचा जा सकता है:

<somePluginProperty>${foo}</somePluginProperty> 
3

गुणों का उपयोग करना निश्चित रूप से आदर्श नहीं है, हालांकि आदर्श नहीं है। यह अभी भी उपयोगकर्ता को पोम भर में कई स्थानों पर $ {propertyName} को परिभाषित करने की आवश्यकता है। मैं अपनी प्लगइन को प्लगइन परिभाषा के अलावा, उपयोगकर्ता के पोम में कोई संशोधन के साथ काम करने की अनुमति देना चाहता हूं।

मैं बहुत तंग युग्मन के रूप में एक और मोजो के क्रम गुण तक पहुँचने नहीं दिख रहा। अन्य मोजो निर्माण पदानुक्रम में कहीं भी परिभाषित किया गया है, तो मैं अपने मोजो एक ही विन्यास का सम्मान करना चाहते हैं।

मेरे वर्तमान समाधान है:

private Plugin lookupPlugin(String key) { 

    List plugins = getProject().getBuildPlugins(); 

    for (Iterator iterator = plugins.iterator(); iterator.hasNext();) { 
     Plugin plugin = (Plugin) iterator.next(); 
     if(key.equalsIgnoreCase(plugin.getKey())) { 
      return plugin; 
     } 
    } 
    return null; 
} 


/** 
* Extracts nested values from the given config object into a List. 
* 
* @param childname the name of the first subelement that contains the list 
* @param config the actual config object 
*/ 
private List extractNestedStrings(String childname, Xpp3Dom config) { 

    final Xpp3Dom subelement = config.getChild(childname); 
    if (subelement != null) { 
     List result = new LinkedList(); 
     final Xpp3Dom[] children = subelement.getChildren(); 
     for (int i = 0; i < children.length; i++) { 
      final Xpp3Dom child = children[i]; 
      result.add(child.getValue()); 
     } 
     getLog().info("Extracted strings: " + result); 
     return result; 
    } 

    return null; 
} 

यह कुछ छोटे के लिए काम किया है बनाता है मैं के साथ परीक्षण किया है। एक बहु मॉड्यूल निर्माण सहित।

3

आप निम्न चरणों का उपयोग प्लगइन्स वर्तमान में निर्माण में इस्तेमाल किया गया की एक सूची प्राप्त कर सकते हैं:

सबसे पहले आप Maven अपने मोजो में चालू परियोजना इंजेक्षन करने के लिए मिल की जरूरत है, तो आप प्राप्त करने के लिए वर्ग चर नीचे परिभाषित का उपयोग इस।

/** 
* The maven project. 
* 
* @parameter expression="${project}" 
* @readonly 
*/ 
private MavenProject project; 

फिर आप इस बिल्ड में उपयोग किए गए प्लगइन की सूची प्राप्त करने के लिए निम्न का उपयोग कर सकते हैं।

mavenProject.getBuildPlugins() 

आप इस सूची के बावजूद पुन: सक्रिय कर सकते हैं जब तक आपको प्लगइन नहीं मिल जाता जिससे आप कॉन्फ़िगरेशन निकालना चाहते हैं।

अंत में, आप कॉन्फ़िगरेशन को Xpp3Dom के रूप में प्राप्त कर सकते हैं।

plugin.getConfiguration() 

नोट: यदि आपका (बस निकालने जानकारी के बजाय) अन्य प्लग-इन विन्यास में फेरबदल, तो वह केवल बाद में चरणों वर्तमान चरण के लिए और नहीं बदल रहेगा।

+0

यह मेरे समाधान से अलग कैसे है? इसके अलावा, क्या मिलता है BuildPlugins pom.xml के अनुभाग में परिभाषित केवल प्लगइन्स लौटाता है, या सभी प्लगइन्स, यहां तक ​​कि प्रोफाइल आदि में परिभाषित भी? – npellow

+1

getBuildPlugins() का उपयोग केवल प्लगइन को वापस कर देगा जो पोम के अनुभाग में हैं।एक्सएमएल और प्लगइन्स जिन्हें सक्रिय प्रोफाइल के अनुभाग में परिभाषित किया गया है। – Kingamajick

+0

@ किंगमजिक क्या मुझे किसी भी तरह से बदले गए बदलावों को फ्लश करना है? मैंने प्लगइन निर्भरताओं को बदल दिया है (इस प्लगइन निष्पादन के दौरान) और मुझे अपेक्षित परिणाम दिखाई नहीं दे रहा है –

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