2010-08-16 16 views
5

मैं एक Maven आवेदन इसMaven एक और

application_name/ 
    module1 
     src/main/resources 
      file_snippet.xml 
    module2 
     src/main/resources 
      file_snippet.xml 
    module3 
     src/main/resources 
      file.xml 

file.xml की तरह इस

<workflow> 
    <action> 
    <%= module1/src/main/resources/file_snippet.xml %> 
    </action> 

    <action> 
    <%= module2/src/main/resources/file_snippet.xml %> 
    </action> 

</workflow> 

मैं file_snippet की सामग्री को शामिल करना चाहते हैं की तरह होना चाहिए लग रहा है कि राशि में एक मॉड्यूल से फ़ाइल की सामग्री में शामिल हैं मॉड्यूल 2 और मॉड्यूल 2 से .xml निर्माण से पहले मॉड्यूल 3 के file.xml में। क्या यह मेवेन में संभव है? क्या मैं कुछ प्रकार की टेम्पलेटिंग भाषा या प्लगइन का उपयोग कर सकता हूं?

उत्तर

1

मैं Maven के लिए कुछ टेम्पलेट इंजन के बारे में भी जानना चाहते हैं, लेकिन हो सकता है आप उस के लिए पहली बार में Maven जरूरत नहीं है। http://bobcat.webappcabaret.net/javachina/faq/xml_01.htm#dtd_Q408

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE root [ 
    <!ENTITY xmlfrag SYSTEM "xmlfrag.txt" > 

    <!ELEMENT root (tag1, tag2) > 
    <!ELEMENT tag1 (childtag) > 
    <!ELEMENT tag2 (childtag) > 
    <!ELEMENT childtag (#PCDATA) > 
    <!ATTLIST childtag att NMTOKEN #REQUIRED > 
]> 
<root> 
    &xmlfrag; 
</root> 

xmlfrag.txt(well formed xml fragment without xml decl) 

<tag1> 
    <childtag att="child1">text1</childtag> 
</tag1> 
<tag2> 
    <childtag att="child2">text2</childtag> 
</tag2> 
बाकी

, निर्भरता/मॉड्यूल के बीच एक्सएमएल संसाधनों विलय Maven में, आप Maven-छाया-प्लगइन का उपयोग कर सकते हैं के लिए:

एक तरह से एक xml फ़ाइल में एक और xml फ़ाइल शामिल करने के लिए नहीं है (संसाधन ट्रांसफॉर्मर के साथ)।

आपके मामले में:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>1.4</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
       <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
        <resource>file.xml</resource> 
        <!-- Add this to enable loading of DTDs 
        <ignoreDtd>false</ignoreDtd> 
        --> 
       </transformer> 
       </transformers> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

विलय करने के लिए module1/src/मुख्य/संसाधन/file.xml और module2/src/मुख्य/संसाधन/file.xml module3 में (निर्भरता के आधार पर)/src /main/resources/file.xml।

2

यह आसान नहीं है, आपको दो भागों को लागू करने की आवश्यकता है।

  1. अन्य मॉड्यूल
  2. के स्निपेट प्राप्त का उपयोग कर xml फ़ाइल को इकट्ठा शामिल

1. के लिए आप dependency:unpack मोजो का उपयोग कर सकते हैं:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <executions> 
     <execution> 
      <id>unpack</id> 
      <phase>initialize</phase> 
      <goals> 
      <goal>unpack</goal> 
      </goals> 
      <configuration> 
      <outputDirectory>${project.build.directory}/snippets</outputDirectory> 
      <includes>snippets/*.xml</includes> 
      <artifactItems> 
       <artifactItem> 
       <groupId>your.app</groupId> 
       <artifactId>module1</artifactId> 
       <version>${project.version}</version> 
       <type>jar</type> 
       </artifactItem> 
       <artifactItem> 
       <groupId>your.app</groupId> 
       <artifactId>module2</artifactId> 
       <version>${project.version}</version> 
       <type>jar</type> 
       </artifactItem> 
      </artifactItems> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 

अब आप की नकल की है मॉड्यूल 1.jar/स्निपेट्स और मॉड्यूल 2.jar/स्निपेट्स से लक्ष्य/स्निपेट्स तक सभी स्निपेट (यह आसान हिस्सा था)।

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.1</version> 
    <executions> 
     <execution> 
     <goals> 
      <goal>java</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <mainClass>com.yourcompany.YourTemplateParser</mainClass> 
     <arguments> 
     <argument>path/to/your/template</argument> 
     <argument>path/to/the/snippets/folder</argument> 
     <argument>target/path</argument> 
     </arguments> 
    </configuration> 
    </plugin> 

(व्यक्तिगत रूप से, मैं बजाय GMaven का उपयोग करते हैं:

2. के लिए आप a template engine लेने और एक मुख्य वर्ग बनाने इसके साथ अपने टेम्पलेट इकट्ठा करने के लिए, शायद इस तरह exec:java मोजो कुछ का उपयोग कर की जरूरत है exec: जावा, जैसा कि आप कस्टम जावा कक्षाओं के निर्माण के बिना इनलाइन ग्रोवी स्क्रिप्ट लिख सकते हैं)