मुझे अपने प्रोजेक्ट की रनटाइम निर्भरताएँ target/lib
फ़ोल्डर में कैसे मिलेंगी ?
यह अभी है, के बाद के रूप में फ़ोल्डर केवल अपने प्रोजेक्ट के जार, लेकिन क्रम निर्भरता से कोई भी शामिल हैं।mvn clean install
target
मुझे अपने प्रोजेक्ट की रनटाइम निर्भरताएँ target/lib
फ़ोल्डर में कैसे मिलेंगी ?
यह अभी है, के बाद के रूप में फ़ोल्डर केवल अपने प्रोजेक्ट के जार, लेकिन क्रम निर्भरता से कोई भी शामिल हैं।mvn clean install
target
जवाबों:
यह मेरे लिए काम करता है:
<project>
...
<profiles>
<profile>
<id>qa</id>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
excludeScope
विकल्प ( maven.apache.org/plugins/maven-d dependency-plugin-… ) पर जोड़ता हूं ।
<excludeScope>test</excludeScope>
अंदर जाता है configuration
।
सबसे अच्छा तरीका इस बात पर निर्भर करता है कि आप क्या करना चाहते हैं:
mvn install dependency:copy-dependencies
लक्ष्य फ़ोल्डर में बनाई गई निर्भरता निर्देशिका के साथ मेरे लिए काम करता है। पसंद है!
मावेन निर्भरता प्लगइन पर एक नज़र डालें , विशेष रूप से, निर्भरता: प्रतिलिपि-निर्भरता लक्ष्य । शीर्षक के तहत उदाहरण पर एक नज़र डालें निर्भरता: कॉपी-निर्भरता मोजो । सेट outputDirectory $ {basedir} / लक्ष्य / lib करने के लिए विन्यास संपत्ति (मेरा मानना है कि, आप परीक्षण करना होगा)।
उम्मीद है की यह मदद करेगा।
उस मामले के लिए एक सरल और सुरुचिपूर्ण समाधान जहां किसी को मावेन के किसी भी अन्य चरणों का उपयोग किए बिना निर्भरता को एक लक्ष्य निर्देशिका में कॉपी करने की आवश्यकता होती है (मुझे यह बहुत उपयोगी पाया गया जब वाडिन के साथ काम करते हुए)।
पूरा पोम उदाहरण:
<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>
<groupId>groupId</groupId>
<artifactId>artifactId</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${targetdirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
फिर भागो mvn process-sources
जार फ़ाइल निर्भरता में पाया जा सकता है /target/dependency
यदि आप कभी-कभार यह करना चाहते हैं (और इस तरह अपना पीओएम नहीं बदलना चाहते हैं), तो यह कमांड-लाइन आज़माएँ:
mvan निर्भरता: कॉपी-निर्भरता -DutputDirectory = $ {project.build.directory} / lib
यदि आप अंतिम तर्क छोड़ देते हैं , तो आश्रितों को इसमें रखा जाता है target/dependencies
।
mvn dependency:copy-dependencies -DoutputDirectory=./lib
कुछ इस तरह की कोशिश करो:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>copy</id>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
maven clean install
, तो आप पाएंगे lib
मेंtarget
install
चरण को प्रतिस्थापित करेगा process-resources
ताकि build
लक्ष्य के चलने से पहले निर्भरता की प्रतिलिपि बनाई जा सके
आपको बस pom.xml का निम्नलिखित स्निपेट चाहिए build/plugins
:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
package
जब आप चलाएंगे तो ऊपर चरण में चलेगा
mvn clean package
और निर्भरताएँ स्निपेट में निर्दिष्ट आउटपुटडायरेरी पर कॉपी की जाएंगी, अर्थात lib
इस मामले में।
यदि आप केवल कभी-कभार ऐसा करना चाहते हैं, तो pom.xml में कोई परिवर्तन आवश्यक नहीं है। बस निम्नलिखित चलाएँ:
mvn clean package dependency:copy-dependencies
डिफ़ॉल्ट स्थान को ओवरराइड करने के लिए, जो है ${project.build.directory}/dependencies
, सिस्टम नाम की संपत्ति जोड़ें outputDirectory
, अर्थात
-DoutputDirectory=${project.build.directory}/lib
यदि आप अपने एप्लिकेशन जार का एक बंडल वितरित करना चाहते हैं, तो इसके सभी निर्भरता और कुछ लिपियों के साथ मेनक्लास को लागू करने के लिए, एपसेंबलर-मावेन-प्लगइन को देखें ।
निम्न कॉन्फ़िगरेशन विंडो लॉन्च करने के लिए विंडो और लिनक्स के लिए स्क्रिप्ट उत्पन्न करेगा (एक निर्भर पथ के साथ सभी निर्भरता जार को संदर्भित करते हुए, सभी निर्भरताएं डाउनलोड करें (लक्ष्य / appassembler के नीचे एक कामेच्छा फ़ोल्डर में)। असेंबली प्लगइन का उपयोग पूरे पैकेज के लिए किया जा सकता है। appassembler एक ज़िप के लिए निर्देशिका जो स्थापित / जार के साथ भंडार में तैनात है।
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>generate-jsw-scripts</id>
<phase>package</phase>
<goals>
<goal>generate-daemons</goal>
</goals>
<configuration>
<!--declare the JSW config -->
<daemons>
<daemon>
<id>myApp</id>
<mainClass>name.seller.rich.MyMainClass</mainClass>
<commandLineArguments>
<commandLineArgument>start</commandLineArgument>
</commandLineArguments>
<platforms>
<platform>jsw</platform>
</platforms>
</daemon>
</daemons>
<target>${project.build.directory}/appassembler</target>
</configuration>
</execution>
<execution>
<id>assemble-standalone</id>
<phase>integration-test</phase>
<goals>
<goal>assemble</goal>
</goals>
<configuration>
<programs>
<program>
<mainClass>name.seller.rich.MyMainClass</mainClass>
<!-- the name of the bat/sh files to be generated -->
<name>mymain</name>
</program>
</programs>
<platforms>
<platform>windows</platform>
<platform>unix</platform>
</platforms>
<repositoryLayout>flat</repositoryLayout>
<repositoryName>lib</repositoryName>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<executions>
<execution>
<phase>integration-test</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/assembly/archive.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
विधानसभा विवरणक (src / main / विधानसभा में) एक ज़िप के रूप में direcotry पैकेज करने के लिए होगा:
<assembly>
<id>archive</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/appassembler</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
यदि आप अपनी परियोजना को युद्ध बनाते हैं या कान के प्रकार मावेन निर्भरता की नकल करेंगे।
आप uber जार बनाने के लिए Shade Plugin का उपयोग कर सकते हैं जिसमें आप अपने सभी 3rd पार्टी निर्भरता को बंडल कर सकते हैं।
बस जो पहले से ही संक्षिप्त में कहा गया है उसे वर्तनी के लिए। मैं एक निष्पादन योग्य JAR फ़ाइल बनाना चाहता था जिसमें मेरे कोड के साथ मेरी निर्भरता भी शामिल हो। यह मेरे लिए काम किया:
(1) pom में, <build> <plugins> के तहत, मैंने शामिल किया:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<archive>
<manifest>
<mainClass>dk.certifikat.oces2.some.package.MyMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
(2) रनिंग मावन कंपाइल असेंबली: असेंबली ने प्रोजेक्ट के टार्गेट डायरेक्टरी में वांछित my-project-0.1-SNAPSHOT-jar-with-dependencies.jar का उत्पादन किया।
(3) मैंने जावा को जावा -जार के साथ चलाया-मेरी परियोजना-0.1-स्नैपशॉट-जार-पर-निर्भरता।
यह भारी निर्भरताओं को एम्बेड करने के लिए एक भारी समाधान है, लेकिन मावेन की असेंबली प्लगइन मेरे लिए चाल करता है।
@ रिच सेलर का जवाब काम करना चाहिए, हालांकि सरल मामलों के लिए आपको केवल उपयोग गाइड से इस अंश की आवश्यकता होनी चाहिए :
<project>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
यदि आपको ग्रहण में टॉमकैट सर्वर पर चलने पर WEB-INF / lib फ़ाइल में प्रदर्शित न होने वाली निर्भरता से संबंधित समस्याएं हैं, तो इस पर एक नज़र डालें:
आपको बस प्रोजेक्ट गुण> परिनियोजन असेंबली में मावेन डिपेंडेंसी को जोड़ना होगा।