2011-09-23 18 views
7

को अजीब कलाकृतियों धक्का मैं एक Maven परियोजना जहाँ मैं एक युद्ध फ़ाइल का निर्माण कर रहा हूँ के साथ निर्माण, लेकिन मैं यह भी Maven-जार-प्लगइन का उपयोग कर रहा एक ही परियोजना में एक जार बनाने के लिए।Maven युद्ध और जार आंतरिक रेपो

- डिस्क्लेमर - मुझे पता है कि यह करने के लिए यह 'सही' तरीका नहीं है, लेकिन कुछ अन्य समस्याएं होती हैं जब इसे एक जार परियोजना में विभाजित करते हैं और कुछ तृतीय पक्ष प्लगइन के साथ एक अलग युद्ध प्रोजेक्ट होता है।

मुझे इसके साथ कुछ अजीब व्यवहार दिखाई दे रहा है। नीचे मेरी परियोजना संरचना है।

warproject 
-src 
--main 
---webapp 
----WEB-INF 
-----web.xml 
---java 
----com.test.myclass 
-----test.java 
-pom.xml 

जब मैं इस परियोजना का निर्माण, मैं, मेरे लक्ष्य निर्देशिका में सही युद्ध और जार फ़ाइल प्राप्त अपने स्थानीय .m2 रेपो कुछ अजीब होता है में हालांकि। स्थापित की गई युद्ध फ़ाइल को सही ढंग से युद्ध-जार-0.0.1-SNAPSHOT.war नाम दिया गया है, हालांकि इस फ़ाइल की सामग्री मेरी जार फ़ाइल की सामग्री है। यह तब भी होता है जब मैं उलटा करता हूं। यानी यदि मैं अपनी परियोजना को एक जार बनाने और युद्ध बनाने के लिए मेवेन-वॉर-प्लगइन का उपयोग करने के लिए सेटअप करता हूं, तो मेरी लक्षित निर्देशिका में अभिलेखागार सही हैं, लेकिन मेरे स्थानीय रेपो में मेरी युद्ध फ़ाइल की सामग्री के साथ जार फ़ाइल है। नीचे दी गई पोम फ़ाइल है जिसका मैं उपयोग कर रहा हूं।

<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> 
    <groupId>com.test</groupId> 
    <artifactId>war-jar</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <configuration> 
        <jarName>${project.artifactId}-${project.version}-client</jarName> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-a-jar</id> 
         <phase>package</phase> 
         <goals> 
          <goal>jar</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
     <resources> 
      <resource> 
       <directory>src/main/java</directory> 
      </resource> 
      <resource> 
       <directory>src/main/resources</directory> 
      </resource> 
     </resources> 
    </build> 

</project> 

इसके लिए कंसोल आउटपुट निम्न है, यह दर्शाता है कि जार युद्ध के रूप में अपलोड किया जा रहा है।

Installing /home/me/work/src/war-jar/target/war-jar-0.0.1-SNAPSHOT.jar to /home/me/.m2/repository/com/test/war-jar/0.0.1-SNAPSHOT/war-jar-0.0.1-SNAPSHOT.war 

--UPDATE मैं इस काम के है, लेकिन मुझे पैकेज से स्थापित करने के लिए अपने 'बनाने के एक जार' निष्पादन के चरण बदलना पड़ा। यह ठीक काम करता है और सही कलाकृतियों को अपलोड किया जाता है, लेकिन मैं अभी भी उलझन में हूं कि इससे कोई फर्क क्यों पड़ता है। जाहिर है कि आर्टिफैक्ट एक अलग जीवन चक्र चरण में उत्पन्न होता है, और इसलिए परियोजना के लिए मूल इंस्टॉल के समय नहीं है, इसलिए गलत फ़ाइल अपलोड नहीं की गई है। यह एक 'हैक' जैसा लगता है और मैं समझना चाहता हूं कि यह इस तरह से क्यों व्यवहार कर रहा है।

+0

जार/युद्ध बनाने के लिए आप किस आदेश का उपयोग करते हैं? एमवीएन स्थापित करें? –

+0

हां एमवीएन परियोजना पर स्थापित करें। – broschb

उत्तर

4

मैं अपने स्वयं के प्रश्नों का उत्तर दे रहा हूं क्योंकि मुझे कोई जानकारी नहीं मिली जो मुझे मेरे समाधान में मदद करने में मदद मिली। मेरे समाधान के लिए मेरे मूल प्रश्न पर मेरा अपडेट देखें।

2

आप इस लक्ष्य को हासिल करने के लिए Maven: स्थापित-प्लगइन के लिए विन्यास निर्दिष्ट की जरूरत है। <build> के तहत निम्न प्लगइन कॉन्फ़िगरेशन जोड़ें।

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-install-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>install</phase> 
        <goals> 
         <goal>install-file</goal> 
        </goals> 
        <configuration> 
         <packaging>jar</packaging> 
         <artifactId>${project.artifactId}</artifactId> 
         <groupId>${project.groupId}</groupId> 
         <version>${project.version}</version> 
         <file> 
          ${project.build.directory}/${project.artifactId}-${project.version}.jar 
         </file> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
+0

यह काफी नहीं है। यह मेरे जार रेपो में स्थापित करेगा। मेरे पास यह था लेकिन मेरे उदाहरण को यथासंभव सरल बनाने के लिए इसे हटा दिया गया। मैं रिपो को जार और युद्ध दोनों प्राप्त कर सकता हूं, समस्या यह है कि मेरी युद्ध फ़ाइल में सामग्री है जो जार फ़ाइल में होनी चाहिए। मैंने अपने मूल प्रश्न को कंसोल आउटपुट के साथ अपडेट किया है जो इसका वर्णन करता है। – broschb

4

यह भी काम करता है,

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <executions> 
    <execution> 
     <!-- 
     When also running maven-jar-plugin correct maven-war-plugin's ID 
     from "default-war" to "default-jar" 
     --> 
     <id>default-jar</id> 
     <phase>package</phase> 
     <goals><goal>war</goal></goals> 
     <configuration> 
     ... 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

, यह जानने के लिए क्यों अपनी परियोजना बर्ताव करता है उसी रूप में http://maven.apache.org/guides/mini/guide-default-execution-ids.html

का संदर्भ लें प्रभावी पोम का विश्लेषण।

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