2012-05-04 19 views
9

मैं एक परियोजना एक जार फ़ाइल वितरित करने के लिए की उम्मीद है:मैवेन मुख्य आर्टिफैक्ट के रूप में कस्टम निर्मित जार फ़ाइल को कैसे पंजीकृत करें?

<packaging>jar</packaging> 

लेकिन जार एक कस्टम तरह से बनाया गया है, ताकि डिफ़ॉल्ट पैकेजिंग जार के साथ किया: जार निष्क्रिय कर दिया गया

<plugin> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.3.2</version> 
    <executions> 
    <execution> 
     <id>default-jar</id> 
     <phase>none</phase> 
    </execution> 
    </executions> 
</plugin> 

लेकिन तो जब मैं लागू करने के लिए छाया हैं: मौजूदा जार पर छाया मैं एक त्रुटि

परियोजना मुख्य विरूपण साक्ष्य मौजूद नहीं है मिलता है।

मुझे लगता है कि मैवेन को मेरे कस्टम टूल द्वारा बनाई गई .jar फ़ाइल के बारे में पता नहीं है। org.apache.maven.artifact.InvalidArtifactRTException: विरूपण साक्ष्य {के लिए कैसे क्योंकि antrun attachArtifact

<attachartifact file="./bin/classes.jar" classifier="" type="jar"/> 

काम नहीं करता त्रुटि मैं

एक चींटी BuildException हुआ है है यह बताने के लिए,: जार}: एक संलग्न आर्टिफैक्ट के पास इसके संबंधित मुख्य आर्टिफैक्ट की तुलना में एक अलग आईडी होना चाहिए।

तो यह मुख्य आर्टिफैक्ट पंजीकृत करने का तरीका नहीं है ... क्या कोई है (कस्टम जावा प्लगइन लिखने के बिना)?

धन्यवाद, लुकाज़

उत्तर

1

मैंने जारमोजो के स्रोतों की जांच की और यह मुझे इस बात का अंदाज़ा (gmaven के माध्यम से) ग्रूवी साथ इसे हल करने

<plugin> 
    <groupId>org.codehaus.gmaven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
    <execution> 
     <id>set-main-artifact</id> 
     <phase>package</phase> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <configuration> 
     <source> 
      project.artifact.setFile(new File("./bin/classes.jar")) 
     </source> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

और यह काम करता दिया! :)

0

हम एक ही समस्या कर रहे थे "संलग्न विरूपण साक्ष्य उससे संबंधित मुख्य विरूपण साक्ष्य तुलना में एक अलग आईडी होना चाहिए" हो रही त्रुटि के साथ।

http://devblog.virtage.com/2013/04/embed-and-run-ant-tasks-and-scripts-from-maven/

के रूप में विस्तृत in this section, आप एक वर्गीकारक तो Maven चींटी से बनाया जार और Maven से बनाया जार बीच भेद कर सकते जोड़कर इस समस्या को ठीक कर सकते हैं: हम निम्नलिखित उत्कृष्ट ब्लॉग पोस्ट में समाधान मिल गया। आप antrun attachartifact उपयोग कर रहे हैं के बाद से, आप इस आवश्यकता होगी:

<attachartifact file="./bin/classes.jar" classifier="foo" type="jar"/> 

नोट आप यह भी कहा कि वर्गीकारक शामिल करने के लिए (ग्रुप, artifactId और संस्करण के साथ) की आवश्यकता होगी जब भी आप एक निर्भरता के रूप में यह जार हड़पने के लिए चाहते हैं अन्य परियोजनाओं में। अपने समाधान करने के लिए एक निर्माण के लिए काम कर सकते हैं

1

कुछ इस

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
      <id>attach-artifacts</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
        <artifact> 
         <file>${basedir}/bin/classes.jar</file> 
         <type>jar</type> 
        </artifact> 
       </artifacts> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
0

तरह + चरण या स्थापित जहां रिएक्टर में कोई निर्भरता मामलों में जहां केवल विसंकुलित वर्गों संकलन या परीक्षण चरण के लिए निर्माण कर रहे हैं निर्भरताओं द्वारा नहीं मिलेगा। मैवेन-रिलीज-प्लगइन जैसे प्लगइन का उपयोग करते समय संकलन करने के लिए बिल्डिंग होती है।

अपनी चुनी समाधान का विस्तार संकलन

<plugin> 
    <groupId>org.codehaus.gmaven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
    <execution> 
     <id>set-main-artifact-compile</id> 
     <phase>compile</phase> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <configuration> 
     <source> 
      project.artifact.setFile(new File("./bin/classes")) 
     </source> 
     </configuration> 
    </execution> 
    <execution> 
     <id>set-main-artifact</id> 
     <phase>package</phase> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <configuration> 
     <source> 
      project.artifact.setFile(new File("./bin/classes.jar")) 
     </source> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

दौरान पैक वर्गों की पहचान के डिफ़ॉल्ट रूप से शामिल करने के लिए Maven: स्थापित-प्लगइन ${project.build.directory}/${project.finalname}.jar

की तर्ज पर पहचान विरूपण साक्ष्य का उपयोग करेगा तो एक और विकल्प हो सकता है इस तरह कुछ

<build> 
    <directory>bin</directory> 
    <outputDirectory>bin/classes</outputDirectory> 
    <finalName>classes</finalName> 
</build>