2012-10-10 13 views
6

मैंने एक आर्केटाइप बनाया है जहां आप मॉड्यूलनाम (या उम्मीद कर सकते हैं) का उपयोग कर एक आवश्यक प्रॉपर्टी मॉड्यूल नाम का उपयोग कर सकते हैं, यहां आर्चेटाइप मेटाडाटा xml (कम है, जिसे मैंने इसी तरह के परिणामों के साथ भी कोशिश की है)मैवेन आर्केटाइप मॉड्यूल नाम बनाने के लिए गुणों का उपयोग नहीं कर रहा है

<?xml version="1.0" encoding="UTF-8"?> 
<archetype-descriptor name="modules-archetype"> 

    <requiredProperties> 
    <requiredProperty key="moduleName"> 
    </requiredProperty> 
    </requiredProperties> 

    <modules> 
    <module id="modules-${moduleName}-api" 
      dir="modules-__moduleName__-api" 
      name="modules-${moduleName}-api"> 
     <fileSets> 
     <fileSet encoding="UTF-8"> 
      <directory>src/main/java</directory> 
     </fileSet> 
     </fileSets> 
    </module> 
    </modules> 

</archetype-descriptor> 

स्थापित करने और उत्पादन के बाद, moduleName मूल्य निर्देशिका का नाम या artifactid में नहीं किया जाता है, resuting मान हैं

For the directory:  project/module-__moduleName__-api 
For the pom/artifactId: module-${moduleName}-api 

मूल्य सही बदल दिया जाता है प्रोजेक्ट की कुछ अन्य फाइलों पर ly, तो मुझे लगता है कि कोई वर्तनी समस्या नहीं है।

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

किसी भी समस्या को हल करने में सक्षम नहीं है, कोई विचार यह क्यों काम नहीं कर रहा है, या इसे कैसे काम करना है?

उत्तर

2

Maven-मूलरूप आदर्श सूत्रों के अंदर खोज रहे हैं (संस्करण 2.2), तभी संभव मूल्य लगता है का उपयोग करने के DefaultFilesetArchetypeGenerator

while (subprojects.hasNext()) { 

     ModuleDescriptor project = subprojects.next(); 

     File moduleOutputDirectoryFile = new File(outputDirectoryFile 
      , StringUtils.replace(project.getDir() 
        , "__rootArtifactId__" 
        , rootArtifactId 
        )); 
     ........... 
+0

बग देखें http://jira.codehaus.org/browse/ARCHETYPE-191 जो करता है चीजों को ज्यादा स्पष्ट नहीं करें, लेकिन कम से कम समस्या पहले से ही – tonio

3

से निकाला rootArtifactId है मैं एक उचित काम के आसपास पाया।

केवल जगह है जहाँ आप केवल उपयोग कर सकते हैं rootArtifactIdमूलरूप आदर्श वर्णनकर्ता में <module> तत्व है लगता है, लेकिन हर दूसरे जगह में आप किसी भी मुसीबत के बिना moduleName संपत्ति का उपयोग कर सकते हैं।

क्या मैंने किया:

उपयोग मॉड्यूल के पोम में $ {moduleName} में

  • artifactId
  • कुछ डिफ़ॉल्ट निर्भरता
  • मुख्य पोम में मॉड्यूल परिभाषा (<module>module-${moduleName}</module>)
  • आदि

उपयोग __ moduleName __ src/मुख्य/जावा में

में
  • पैकेज का नाम & संसाधनों

विरूपण साक्ष्य वर्णनकर्ता में

  • मॉड्यूल-नमूना 1 & मॉड्यूल-नमूना 2 (और निश्चित रूप से आर्टिफैक्ट संसाधनों के अंदर निर्देशिकाओं को उसी तरह से नामित करें) जैसे फिक्स मॉड्यूल नाम का उपयोग करें।

ठीक करने के लिए हालात के बाद परियोजना

  1. मॉड्यूल 'निर्देशिका नाम बनाई गई है
  2. मुख्य पोम कि मॉड्यूल नमूना [12]
  3. शामिल में मॉड्यूल तत्वों बाहर ले

यह सब एक निर्माण की रचना के बाद चलाने के लिए एक postcreate-pom.xml में एम्बेडेड एक चींटी स्क्रिप्ट में है।

और यह आसानी से काम किया।

आशा है कि यह किसी के लिए उपयोगी होगा।

सभी को धन्यवाद कि मेरे प्रश्न, tonio पढ़ने के लिए बस समय निकालें।

+1

है, मुझे एक ही समस्या है। 'Postcreate-pom.xml' के साथ आपका क्या मतलब है? क्या प्रोजेक्ट सृजन के अंत में कुछ पोस्ट-निर्माण-क्रिया करने का कोई मानक तरीका है? –

+0

वैसे मुझे ऐसा करने का कोई तरीका नहीं मिला, मैं प्रोजेक्ट के हिस्से के रूप में पोस्टक्रेट-पोम.एक्सएमएल बना देता हूं और परियोजना सेटअप को पूरा करने के लिए इसे बाद में चलाता हूं। – tonio

1

किसी प्रोजेक्ट से आर्केटाइप उत्पन्न करने के बाद, फ़ाइल target\generated-sources\archetype\src\main\resources\META-INF\maven\archetype-metadata.xml फ़ाइल संपादित करें।

<fileSet filtered="true" packaged="true" encoding="UTF-8"> 
     <directory></directory> 
     <includes> 
     <include>pom.xml</include> 
     </includes> 
    </fileSet> 

जोड़े यह यह आपके पोम फ़ाइल को फ़िल्टर कर देगा! फिर mvn install फिर से चलाएं।

+0

मेरी समस्या यह थी कि मैंने config.yml फ़ाइल में से किसी एक में $ {artifactId} का उपयोग करने का प्रयास किया और यह काम नहीं किया। Archetype-metadata.xml में जा रहे हैं और */**। Yml काम शामिल हैं। धन्यवाद – vutbao

0

मूलरूप आदर्श-metadata.xml और उप मॉड्यूल के pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<archetype-descriptor name="multi-module"> 

    <modules> 
    <module name="${rootArtifactId}-ria" id="${rootArtifactId}-ria" dir="__rootArtifactId__-ria"> 
     <fileSets> 
     <fileSet filtered="true" packaged="true"> 
      <directory>src/main/java</directory> 
      <includes> 
      <include>**/*.java</include> 
      </includes> 
     </fileSet> 
     <fileSet filtered="true" packaged="true"> 
      <include>pom.xml</include> 
     </fileSet> 
     </fileSets> 
    </module> 
    </modules> 


</archetype-descriptor> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <groupId>${groupId}</groupId> 
    <artifactId>${rootArtifactId}</artifactId> 
    <version>${version}</version> 
    </parent> 

    <artifactId>${artifactId}</artifactId> 
    <packaging>war</packaging> 

</project> 
संबंधित मुद्दे