2009-05-11 5 views
21

हमारे पास कई युद्धों का समाधान है। युद्ध इस अर्थ में समान हैं कि वे सभी हाइबरनेट और वसंत का उपयोग करते हैं। इसका मतलब है कि हमारे पास प्रत्येक युद्ध के अंदर कई जार हैं। यह एक समस्या बन रही है, क्योंकि कान का आकार अनुपात से बाहर बढ़ना शुरू हो रहा है।मैवेन को एक ही ईएआर रूट में ईएआर रूट के लिए युद्ध के लिए आम तौर पर सभी जारों को कैसे बनाया जाए?

मैं निर्भरता की गणना करने के लिए मेवन का उपयोग करना चाहता हूं और सभी जारों को ईएआर की जड़ में कई युद्धों में आम रखने के लिए उपयोग करना चाहता हूं।

मैंने j2ee archetype (maven-archetype-j2ee-simple) का उपयोग करके अपनी परियोजना को व्यवस्थित करने का प्रयास किया, लेकिन सभी युद्ध अभी भी वेब-आईएनएफ/lib के अंदर निर्भरताओं के साथ पैक किए गए हैं। क्या मैवेन सामान्य निर्भरताओं की गणना करने और उन्हें ईएआर में रखने का कोई तरीका है, जैसे कि वह युद्ध या जार बनाने के दौरान सभी संक्रमणकालीन निर्भरताओं की गणना करने में सक्षम है?

उत्तर

8

कॉमन्स-जार नामक एक नया विरूपण साक्ष्य बनाएँ और पोम के रूप में यह पैकेज। यह आपके द्वारा उपयोग किए जा रहे सभी सामान्य जारों पर निर्भर होना चाहिए - स्प्रिंग, हाइबरनेट, लॉग 4j, आदि

फिर, प्रत्येक में आपके युद्धों में इसे "प्रदान" के दायरे के साथ निर्भरता के रूप में जोड़ें (और प्रकार को सेट करना न भूलें पोम के रूप में)। आप इसे अपने क्लासपाथ में देख पाएंगे लेकिन उन्हें युद्ध में पैक नहीं किया जाएगा। इस तरह आप इसमें युद्ध विशिष्ट निर्भरताओं को भी पैक कर सकते हैं, जो skinny wars से समाधान प्रदान नहीं करता है।

+0

तो हम commons-jars.jar बनाने के बाद, क्या हमें इसे 1) सर्वर/डिफ़ॉल्ट/lib या 2) कान रूट में जोड़ना चाहिए? – Rips

+2

जाने का सबसे अच्छा तरीका नहीं है, अगला जवाब देखें! – Christophe

+1

@toefel कृपया "अगला" उत्तर परिभाषित करें। WHOM या एक लिंक का उत्तर सहायक होगा, क्योंकि वे वोटों के आधार पर स्थानों को स्विच कर सकते हैं। – Ben

4

आप dependancies scope को "प्रदत्त" पर सेट कर सकते हैं। इसका मतलब है कि उन्हें कुछ अन्य मॉड्यूल द्वारा प्रदान किया जाएगा और अंतिम जार या युद्ध में शामिल नहीं किया जाएगा।

शायद assembly plugin अंतिम ईएआर पैकेजिंग करते समय आपकी मदद कर सकता है और वहां सामान्य जार रख सकता है।

4
+4

के अंदर सुझाए गए यूआरएल से रखा जाएगा: "अब दर्दनाक हिस्सा। आपके ईएआर प्रोजेक्ट के pom.xml को WAR की हर निर्भरता को सूचीबद्ध करने की आवश्यकता है। ऐसा इसलिए है क्योंकि मेवेन वसा युद्धों को मानता है और इसमें ईएआर के भीतर युद्धों की पारस्परिक निर्भरता शामिल नहीं होती है। " मैंने पूछा: मैं निर्भरता की गणना करने के लिए मेवेन का उपयोग करना चाहूंगा ... निर्भरता की गणना करने के लिए मेवेन का उपयोग किए बिना, यह कोई नहीं है ... – Dan

+1

@Dan, एक शानदार तरीके से दर्दनाक भाग से बचने के लिए टर्बोकीवी जवाब पढ़ें :) –

59

जैसा कि आपने टिप्पणी में उल्लेख किया है, यह हर निर्भरता की गणना करने के लिए मेवेन का कार्य है। जब आप प्रत्येक आम निर्भरता के साथ एक आर्टिफैक्ट बना रहे हैं, तो आपको यह भी अनुमान लगाना होगा कि कौन सी निर्भरताएं संबंधित हैं।

यह भी संभव हो सकता है कि आपको युद्ध के बिना किसी अन्य मशीन पर निर्भरता के साथ एक युद्ध तैनात करना होगा, जब आप प्रत्येक युद्ध निर्भरता प्रदान करने के लिए सेट करते हैं, तो आप फिर से अटक जाते हैं।

केवल सही तरीके से, पतला युद्ध पाने के लिए उदाहरण से है: http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html

लेकिन, और अब दिलचस्प हिस्सा आता है, वहाँ एक बड़ा है! शॉर्टकट (जो पूरी तरह से उल्लिखित दर्द को दूर करता है), मैवेन को बताने के लिए, जो आपके युद्धों पर निर्भर करता है।

अपने ईएआर-मॉड्यूल के अंदर जाएं, प्रत्येक युद्ध निर्भरता के लिए प्रकार के पोम के साथ युद्ध पर दूसरी निर्भरता घोषित करें।

<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>com.foo</groupId> 
    <artifactId>skinny</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</parent> 
<artifactId>ear</artifactId> 
<packaging>ear</packaging> 
<dependencies> 
    <dependency> 
     <groupId>com.foo</groupId> 
     <artifactId>war</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
    <dependency> 
     <groupId>com.foo</groupId> 
     <artifactId>war</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>pom</type> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-ear-plugin</artifactId> 
      <version>2.8</version> 
      <configuration> 
       <skinnyWars>true</skinnyWars> 
       <defaultLibBundleDir>lib</defaultLibBundleDir> 
       <modules> 
        <webModule> 
         <groupId>com.foo</groupId> 
         <artifactId>war</artifactId> 
        </webModule> 
       </modules> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

अब, हर युद्ध अपने आप निर्भरता के साथ स्वतंत्र रूप से पैक किया जाएगा और कान पतला युद्धों और lib फ़ोल्डर के अंदर हर निर्भरता के साथ पैक किया जाएगा

अद्यतन:

ध्यान रखें, कान/lib फ़ोल्डर का उपयोग प्रत्येक निर्भरता जार के लिए जेबॉस ईएपी 6 जैसे सख्त कंटेनर में नहीं किया जा सकता है। जेएसएफ घटक पुस्तकालयों जैसे टोमाहॉक, प्राइमफेस इत्यादि को अवशेष करना पड़ता है ई वेब-आईएनएफ/lib फ़ोल्डर में ई।

... 
<dependencies> 
    <dependency> 
     <groupId>com.foo</groupId> 
     <artifactId>war</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
    <dependency> 
     <groupId>com.foo</groupId> 
     <artifactId>war</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>pom</type> 
     <exclusions> 
      <exclusion> 
       <groupId>org.primefaces</groupId> 
       <artifactId>primefaces</artifactId> 
      <exclusion> 
     </exclusions> 
    </dependency> 
</dependencies> 
... 

अब युद्ध के हर निर्भरता में रखा जाएगा:

ऊपर वर्णित समाधान के साथ इस लक्ष्य को हासिल करने के लिए एक आसान तरीका इस तरह कान pom.xml में घटक पुस्तकालय के लिए बहिष्करण बनाना है कान लाइब्रेरी को छोड़कर कान लाइब्रेरी जिसे WAR

+5

यह ट्रिकरी का एक बहुत ही शानदार बिट है। – Snekse

+4

यह *** वास्तव में *** जरूरत ** टन ** अधिक upvotes !! बहुत बढ़िया ! : डी –

+1

नाइस! :) यह वास्तव में मेरी मदद की है! – Christophe

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