2010-11-22 16 views
8

मैं एक परियोजना पर काम कर रहा हूं जिसने ant का उपयोग किया था। मेरे पास dist का लक्ष्य था जो मूल रूप से jar करेगा, और उसके बाद एप्लिकेशन को निर्देशिका में स्थापित करें।क्या कोई मेवेन लक्ष्य है जो 'dist' के समान है?

इसका मतलब यह है, यह bin/, lib/ और स्थापना निर्देशिका में config/ तरह निर्देशिकाएं बनाएं होगा, और फिर इन निर्देशिकाओं में से प्रत्येक में प्रासंगिक फ़ाइलों की प्रतिलिपि।

मेरा प्रश्न है दो गुना:

  1. वहाँ किसी भी Maven लक्ष्य है कि बात यह है कि इस तरह का होता है है?
  2. यदि नहीं, तो मैं maven dist करना चाहता हूं और ऐसा करना चाहता हूं। आप कैसे सुझाव देंगे कि मैं इसे मैवेन का उपयोग करके पूरा करता हूं?
  3. यदि मेरे पास अपना "लक्ष्य" (दूरी की तरह) नहीं हो सकता है, तो सबसे अच्छा तरीका क्या होगा?

निष्कर्ष: किसी भी मैं यह सब करना चाहते हैं, लेकिन संकलन और पैकेज आदि जैसे डिफ़ॉल्ट "लक्ष्य" के व्यवहार में परिवर्तन करने के लिए

धन्यवाद, नहीं करना चाहती jrh

पुनश्च: मैं Maven संस्करण 2.2.21

उत्तर

6

उपयोग कर रहा हूँ मैं नहीं जानता कि क्या config में जाना होगा, लेकिन lib और bin आसान है।

copy all dependencies to a folder करने के लिए

सिर्फ इस कार्य करें: एक बिन फ़ोल्डर में अपने जार उत्पादन करने के लिए

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>copy-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory> 
       ${project.build.directory}/dist/lib 
       </outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

ऐसा करते हैं (reference page):

:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <finalName>${project.artifactId}</finalName> 
     <outputDirectory>${project.build.directory}/dist/bin</outputDirectory> 
    </configuration> 
</plugin> 

आह, वहाँ अतिरिक्त आवश्यकताओं हैं

नीचे पंक्ति: मैं यह सब करना चाहता हूं, लेकिन डिफ़ॉल्ट "लक्ष्य" के व्यवहार को बदलना नहीं चाहता जैसे सी ompile और पैकेज आदि

इस मामले में मैं यह चालू करने के लिए एक प्रोफ़ाइल का उपयोग करेंगे:

<profile> 
    <id>dist</profile> 
    <build> 
     <plugins> 
      <!-- insert stuff from above here --> 
     </plugins> 
    </build> 
</profile> 

अब आप mvn clean package -Pdist करना होगा अपने जिले निर्देशिका पाने के लिए और अगर आप न जोड़ें प्रोफाइल, आपको डिफ़ॉल्ट व्यवहार मिलता है।

मूल रूप से, चीजें चींटियों से चीजों से अलग तरीके से काम करती हैं। कोई लक्ष्य नहीं हैं, केवल जीवन चक्र चरण और प्लगइन लक्ष्य हैं।

आप एक जीवन चक्र चरण है, जो यह एक करने के लिए सभी Maven प्लगइन लक्ष्यों कि सभी चरणों के लिए बाध्य कर रहे हैं फोन करेगा निष्पादित कर सकते हैं या तो (जैसे अगर आप mvn compile करते हैं, निम्नलिखित चरणों निष्पादित किया जाएगा: validate, initialize, generate-sources, process-sources , generate-resources, process-resources, compile)। लेकिन dist नामक जीवन चक्र चरण को परिभाषित करने के लिए कोई (आसान) तरीका नहीं है।

या आप एक विशिष्ट प्लगइन लक्ष्य निष्पादित कर सकते हैं (आप वास्तव में कई चरणों और/या प्लगइन लक्ष्यों को निष्पादित कर सकते हैं)। जैसे आप अपनी खुद की डिस्ट प्लगइन लिख सकते हैं और इसे mvn dist:dist का उपयोग करके कॉल कर सकते हैं, लेकिन मैं इसकी अनुशंसा नहीं करता क्योंकि आप मौजूदा कार्यक्षमता का उपयोग कर रहे हैं और प्रोफ़ाइल समाधान एक बहुत अच्छा फिट होना चाहिए।

+0

ठीक है, तो यह कार्रवाई कैसे लाएगी? क्या मैं 'एमवीएन पैकेज' चलाता हूं? मैं 'मेवेन डिस्ट' जैसे कुछ करना चाहता हूं और ऐसा करना (इसे प्रश्न में अपडेट किया गया) .. क्या यह संभव है? – jrharshath

+0

+1 एचएम, सहायक। प्रश्न: क्या मैं पैकेज जीवन चक्र में या तैनाती में क्या करना चाहता हूं? और क्यों? – jrharshath

+0

@simpatico मुझे लगता है कि यह सवाल का एक टिप्पणी होना चाहिए, मेरे जवाब के लिए नहीं, है ना? –

0

आप maven dist, NetBeans के साथ (और अन्य IDEs मेरा मानना ​​है कि) नहीं हो सकता है (के रूप में शॉन ने सुझाव दिया, या mvn clean package -Pdist) यदि आप एक custom actiondist जो mvn install -Pdist के रूप में कार्यान्वित बना सकते हैं।

1

आप (एक उपयुक्त एक के लिए खोज गूगल या) assembly plugin के लिए एक assembly descriptor लिखने का प्रयास कर सकता है।

कुछ इस

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation= 
    "http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 
     http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 

    <id>dist</id> 
    <formats><format>zip</format></formats> 

    <fileSets> 
    <fileSet> 
     <directory>src/main/config</directory> 
     <outputDirectory>config</outputDirectory> 
     <useDefaultExcludes>true</useDefaultExcludes> 
    </fileSet> 
    </fileSets> 

    <files> 
    <file> 
     <source>${project.build.directory}/${project.artifactId}.jar</source> 
    </file> 
    </files> 

    <dependencySets> 
    <dependencySet> 
     <useProjectArtifact>false</useProjectArtifact> 
     <outputDirectory>lib</outputDirectory> 
    </dependencySet> 
    </dependencySets> 
</assembly> 

की तरह अपने target निर्देशिका के अंदर एक ${project.artifactId}-dist.zip पैदा करेगा। ज़िप फ़ाइल

yourProjectName/ 
yourProjectName/config/... 
yourProjectName/lib/... 
yourProjectName/${project.artifactId}.jar 

ऐसा लगता है कि विधानसभा प्लगइन केवल कंप्रेस फ़ाइलों पैदा करेगा की तरह बाहर रखी हो जाएगा, यह सिर्फ एक dist फ़ोल्डर में उन्हें कॉपी नहीं करेंगे।

1

सीन्स का जवाब अच्छा है और जब तक मुझे एपसेम्बलर प्लगइन http://mojo.codehaus.org/appassembler/appassembler-maven-plugin/ के बारे में पता नहीं चला, तब तक मैं इसके लिए लगभग चला गया।

एक उदाहरण https://github.com/khmarbaise/maven-training/tree/master/502-assembly-plugin

यह पैकेज जीवन चक्र के हिस्से के रूप में कहा जाता है के लिए यहाँ देखें।

<build> 
<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
    </configuration> 
    </plugin> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>appassembler-maven-plugin</artifactId> 
    <version>1.1</version> 
    <executions> 
     <execution> 
     <phase>prepare-package</phase> 
     <goals> 
      <goal>assemble</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <binPrefix>utility</binPrefix> 
     <assembleDirectory>${project.build.directory}/appassembler</assembleDirectory> 
     <extraJvmArguments>-Xms512m -Xmx1024m</extraJvmArguments> 
     <generateRepository>false</generateRepository> 
     <repositoryName>lib</repositoryName> 
     <repositoryLayout>flat</repositoryLayout> 
     <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath> 
     <platforms> 
     <platform>windows</platform> 
     <platform>unix</platform> 
     </platforms> 
     <programs> 
     <program> 
      <mainClass>com.soebes.tools.cli.UtilityCLI</mainClass> 
      <name>utility</name> 
     </program> 
     </programs> 
    </configuration> 
    </plugin> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2</version> 
    <configuration> 
     <descriptors> 
     <descriptor>src/main/assembly/bin.xml</descriptor> 
     <descriptor>src/main/assembly/bin-unix.xml</descriptor> 
     <descriptor>src/main/assembly/src.xml</descriptor> 
     </descriptors> 
     <tarLongFileMode>gnu</tarLongFileMode> 
    </configuration> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

वर्णनकर्ता यह संदर्भ काफी straigtforward रहे हैं और यह भी आप अपने आवेदन को चलाने के लिए एक बैच और खोल स्क्रिप्ट बनाता है!

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