2013-08-18 10 views
8

मेरे पास एक बहु मॉड्यूल वेब एप्लिकेशन है।मेवेन मल्टी-मॉड्यूल वेब एप्लिकेशन (हॉट स्वैप)

संरचना होती है:

Parent 
| 
| - - Child 1 
| - - Child 2 
| - - Web 

और वेब परियोजना मेरी आईडीई का उपयोग करते समय अपने प्रोजेक्ट के निर्माण के लिए मैं आईडीई WEB- में कक्षाओं के निर्माण के लिए इस्तेमाल किया गया था दो बच्चे मॉड्यूल

पर निर्भर करता है आईएनएफ/कक्षा फ़ोल्डर। यह अच्छा था क्योंकि वेब सर्वर ने नए वर्गों को देखा और फिर इन फ़ाइलों को फिर से शुरू या गर्म तैनात किया। मैवेन के साथ ऐसा लगता है कि मुझे हर चीज को हर बार स्क्रैच से पैकेज करना होता है।

मैं मैवेन में एक रास्ता खोजना चाहता हूं जैसे कि मैं चल रहा एमवीएन से बच सकता हूं: स्वच्छ एमवीएन: एमवीएन स्थापित करें: युद्ध: जगह। इसके बजाय मुझे एक एमवीएन चाहिए: कॉमाइल, और फिर वहां सामान।

मुझे आशा है कि आप समझेंगे कि मेरा क्या मतलब है। वेब ऐप का परीक्षण करना बेहद धीमा है जब आपको हमेशा सभी प्रोजेक्ट जार बनाना होता है और चीजों को अपडेट करने से पहले सोम युद्ध कमांड चलाते हैं।

वेब क्षुधा पोम:

<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/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     ... 
    </parent> 

    <artifactId>web</artifactId> 
    <packaging>war</packaging> 

    <dependencies> 
     <dependency> 
     <groupId>bla.bla.bla</groupId> 
     <artifactId>bla_child1</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     </dependency> 
     <dependency> 
     <groupId>bla.bla.bla</groupId> 
     <artifactId>bla_child2</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.4</version> 
     </plugin> 
     <plugin> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>9.0.4.v20130625</version> 
      <configuration> 
       <scanIntervalSeconds>30</scanIntervalSeconds> 
       <webApp> 
        <contextPath>/blabla</contextPath> 
       </webApp> 
      </configuration> 
     </plugin> 
     </plugins> 
    </build> 
</project> 
+0

आप किस आईडीई का उपयोग कर रहे हैं? कुछ, जैसे ग्रहण, मैवेन और वेबपैप्स के लिए प्लगइन जैसे [m2e] (http://eclipse.org/m2e/) और [WTP] (http://projects.eclipse.org/projects/webtools) के माध्यम से अच्छा समर्थन है। –

+0

इंटेलिजे। आईडीई में इसके लिए समर्थन की कमी नहीं है, लेकिन मुझे लगता है कि यह पूरी तरह से मेवेन में किया जा सकता है। – AnAmuser

+3

[मेवेन जेट्टी प्लगइन] के बारे में क्या है (http://maven.apache.org/plugins/maven-war-plugin/examples/rapid-testing-jetty6-plugin.html) आपकी आवश्यकताओं के अनुरूप नहीं है? क्या यह 'एमवीएन संकलन' के बाद अद्यतन 'लक्ष्य/कक्षा' नहीं उठा रहा है? –

उत्तर

1

यह इस समस्या का अपने ही अस्थायी जवाब है।

यह अच्छा होगा अगर यह मेवेन के साथ किया जा सकता है, लेकिन मुझे कोई समाधान नहीं मिला है। इसलिए मैंने वेब मॉड्यूल के संकलन चरण में एक चींटी लक्ष्य बांध दिया है।

शायद यह कोई समाधान नहीं है जिसका उपयोग कहीं भी किया जा सकता है, लेकिन यह मेरे मामले में काम करता है।

वेब/pom.xml:

  <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.7</version> 
      <executions> 
       <execution> 
        <id>copy-modules</id> 
        <phase>compile</phase> 
        <configuration> 
        <target> 
         <delete dir="${project.basedir}\src\main\webapp\WEB-INF\classes"/> 
         <copy todir="${project.basedir}\src\main\webapp\WEB-INF\classes"> 
          <fileset dir="${main.basedir}\modules\child-1\target\classes"> 
           <include name="**/*.class"/> 
           <include name="**/*.xml"/> 
          </fileset> 
          <fileset dir="${main.basedir}\modules\child-2\target\classes"> 
           <include name="**/*.class"/> 
           <include name="**/*.xml"/> 
          </fileset> 
         </copy> 
        </target> 
        </configuration> 
        <goals> 
        <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

अब घाट हर मैं एक संकलन है, जो स्थापित करते हैं, युद्ध और सामान है कि पहले की जरूरत थी की तुलना में बहुत तेजी से होता है ऐसा देखता है।

+0

इस दृष्टिकोण के साथ समस्या यह है कि यदि कक्षाओं की प्रतिलिपि बनाई जा रही है तो एक नई निर्भरता पेश करें, आप इसे कॉपी करने के लिए नहीं जा रहे हैं (कुछ साझा) lib फ़ोल्डर। उस स्थिति में, ऐप क्लास नॉटफाउंड अपवाद के साथ टूट जाएगा। मैंने अपना जवाब हटा दिया, इसलिए यहां एक [पेस्टबिन लिंक इस स्क्रिप्ट के मेवेन पोर्ट के लिए है] (http://pastebin.com/CmRPyd8F) – linski

2

आपकी समस्या का एक संभावित समाधान मैवेन-वॉर-प्लगइन के साथ skinny war बनाने के लिए हो सकता है (या कम से कम बच्चे 1 और बच्चे 2 को छोड़ दें यदि आपके पास अन्य निर्भरता भी है) और बच्चे के लक्ष्य/कक्षा फ़ोल्डरों को जोड़ें- आपके कक्षा में परियोजनाएं। यह Build Helper Maven Plugin's add-resource goal के साथ किया जा सकता है।

अस्वीकरण: मैंने इसे स्वयं नहीं किया लेकिन सिद्धांत रूप में यह काम कर सकता है :)

+2

मैंने कोशिश की और यह जेटी को पुनरारंभ किए बिना काम नहीं करता है। जेटी वर्ड मॉड्यूल में लक्ष्य/कक्षाओं को छोड़कर कक्षापथ पर बदलावों के लिए स्कैन नहीं करना प्रतीत होता है। –

+1

यहां देखें [कैसे] (http://stackoverflow.com/a/2389464/679982), ऊपर उठाया गया। – linski

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