मावेन परियोजना में स्थानीय जार फाइलें कैसे जोड़ें?


1171

मैं अपनी परियोजना के पुस्तकालय स्रोतों में सीधे स्थानीय जार फाइलें (मावेन भंडार का हिस्सा नहीं) कैसे जोड़ूं?


1
हाय @Praneel PIDIKITI, क्या आप सबसे अधिक मतों के साथ स्वीकार किए गए उत्तर को बदल सकते हैं?
अशक्त

1
@nslntmnx बेहतर समाधान नहीं होगा, क्योंकि सभी समाधानों में कमियां हैं stackoverflow.com/questions/364114/…
पॉल वेरेस्ट

यदि आपके परिवादों को अद्यतन किया जाता है या अवसर पर बढ़ाया जाता है, तो मुझे यह उत्तर दिखाई देता है कि मैं "pomified" तरीके के लिए maven के साथ अपने libs प्रोजेक्ट फ़ोल्डर से सभी JAR लोड करना चाहता हूं और इस तरह के अतिरिक्त रेपो फोल्डर और बोझिल cmd लाइनों और install-fileस्क्रिप्ट से परहेज करता हूं ।
गेरोल्डब्रोज़र मोनिका

जवाबों:


699

अपने स्थानीय मावेन भंडार में जार को निम्नानुसार स्थापित करें:

mvn install:install-file \
   -Dfile=<path-to-file> \
   -DgroupId=<group-id> \
   -DartifactId=<artifact-id> \
   -Dversion=<version> \
   -Dpackaging=<packaging> \
   -DgeneratePom=true

जहां प्रत्येक को संदर्भित करता है:

<path-to-file>: फ़ाइल को लोड करने का पथ उदा → c:\kaptcha-2.3.jar

<group-id>: वह समूह जिसे फ़ाइल → के तहत पंजीकृत होना चाहिए com.google.code

<artifact-id>: फ़ाइल के लिए कलाकृतियों का नाम → kaptcha

<version>: फ़ाइल का संस्करण जैसे → 2.3

<packaging>: फ़ाइल की पैकेजिंग जैसे → jar

संदर्भ


7
मेरे बिल्ड पर स्थापित करने के निर्देश में जनरेट भाग को छोड़कर सब कुछ था। यह महत्वपूर्ण प्रतीत होता है।
जेसन डी।

4
<path-to-file> इसका क्या मतलब है? जैसे C: /Users/XXX/WorkspaceDocx/maven/src/main/resources/myJar.jar ...... या क्या हम $ {project.basedir} /src/main/resources-myJar.jar
इगोर ब्यूफिल्स कर सकते हैं

17
उत्तर में README का उल्लेख नहीं है या कि जार को साथ लाया गया है। हालाँकि, यदि प्रोजेक्ट जार को साथ लाता है तो आप रेपो प्रोजेक्ट में भी रेपो डाल सकते हैं जैसा कि यहां बताया गया है stackoverflow.com/a/36602256/1000011 तो आपको README की कोई आवश्यकता नहीं है क्योंकि प्रोजेक्ट तभी काम करेगा जब जार बिना किसी अतिरिक्त मैनुअल चरणों के मावेन केंद्रीय में थे।
ऑप्टिक

8
@opticyclic आपकी टिप्पणी के लिए और अधिक अपडेट की आवश्यकता है, या इस उत्तर को संपादित करने की आवश्यकता है। यह नौसिखियों के लिए आपदा का एक नुस्खा है जो यह नहीं समझते हैं कि स्थानीय मावेन रेपो में स्थापित करना हर किसी के लिए शामिल नहीं होगा।
माइक एस।


1427

आप स्थानीय निर्भरता को सीधे जोड़ सकते हैं (जैसा कि प्रॉप्राइटर लाइब्रेरीज़ के साथ मावेन प्रोजेक्ट में उल्लिखित है ) इस तरह से:

<dependency>
    <groupId>com.sample</groupId>
    <artifactId>sample</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath>
</dependency>

अपडेट करें

नई रिलीज़ में इस सुविधा को पदावनत के रूप में चिह्नित किया गया है, लेकिन अभी भी काम कर रहा है और अभी तक हटाया नहीं गया है (आप केवल प्रारंभ होने के दौरान लॉग में चेतावनी देखें)। इस मुद्दे के बारे में maven समूह में एक मुद्दा उठाया गया है https://issues.apache.org/jira/browse/MNG-6523 (आप भाग ले सकते हैं और वर्णन कर सकते हैं कि यह सुविधा कुछ मामलों में सहायक क्यों है)। मुझे उम्मीद है कि यह सुविधा वहां बनी हुई है!

यदि आप मुझसे पूछ रहे हैं, जब तक कि सुविधा को हटा नहीं दिया जाता है, मैं अपनी परियोजना में केवल एक शरारती जार फ़ाइल पर निर्भरता बनाने के लिए इसका उपयोग करता हूं जो कि रिपॉजिटरी में फिट नहीं है। यदि यह सुविधा हटा दी जाती है, तो, यहाँ बहुत सारे अच्छे उत्तर हैं, जिन्हें मैं बाद में चुन सकता हूँ!


49
ऐसे समय होते हैं जब आप विशेष रूप से उदाहरण के लिए एक पुराने जार का परीक्षण करना चाहते हैं, और मुझे लगता है कि यह उत्तर उसके लिए एक अच्छा फिट है। यह वही है जिसकी मुझे जरूरत थी। अपवोटेड
जॉन लॉकवुड

36
यह दिखने में जितना अच्छा और आसान है, इस समाधान में यह समस्या है कि yourJar.jar आपके ऐप के लिए WAR फ़ाइल में शामिल नहीं किया जाएगा।
मथायस

40
उपरोक्त समाधान अब और काम नहीं करता है, यह लौटाता है: "xx.jar के लिए निर्भरता। निर्भरता। SystemPath" परियोजना निर्देशिका के भीतर फाइलों पर इंगित नहीं करना चाहिए "यह पहले से ही stackoverflow.com/questions/10935135-"
sarah

8
इस जवाब में, artifactIdऔर groupIdगलत तरीके के आसपास नहीं हैं?
Theonlygusti

5
मावेन मुद्राओं के अनुसार ( maven.apache.org/guides/introduction/… ): महत्वपूर्ण नोट: यह पदावनत चिह्नित है।
अगस्नर

141

सबसे पहले, मैं इस जवाब के लिए एक गुमनाम स्टैक ओवरफ्लो उपयोगकर्ता को क्रेडिट देना चाहूंगा - मुझे पूरा यकीन है कि मैंने पहले भी यहां इसी तरह का जवाब देखा है - लेकिन अब मुझे यह नहीं मिल रहा है।

निर्भरता के रूप में स्थानीय JAR फ़ाइलों के लिए सबसे अच्छा विकल्प एक स्थानीय मावेन भंडार बनाना है। इस तरह का भंडार इसमें pom फ़ाइलों के साथ एक उचित निर्देशिका संरचना से अधिक कुछ नहीं है।

मेरे उदाहरण के लिए: मेरे पास ${master_project}स्थान पर मेरा मास्टर प्रोजेक्ट है और सबप्रोजेक्ट 1 चालू है ${master_project}/${subproject1}

तब मैं में एक Maven भंडार बनाने के लिए: ${master_project}/local-maven-repo

सबप्रोजेक्ट 1 में स्थित पोम फाइल में ${master_project}/${subproject1}/pom.xml, रिपॉजिटरी को निर्दिष्ट करने की आवश्यकता है जो URL पैरामीटर के रूप में फाइल पथ लेगा:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.parent.basedir}/local-maven-repo</url>
    </repository>
</repositories>

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

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.servicebinder</artifactId>
        <version>0.9.0-SNAPSHOT</version>
    </dependency>

अंतिम लेकिन कम से कम काम करने के लिए स्थानीय रिपॉजिटरी का उपयोग करके JAR फ़ाइल को जोड़ना है -DlocalRepositoryPath स्विच जैसे:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file  \
    -Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
    -DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
    -Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
    -DlocalRepositoryPath=${master_project}/local-maven-repo

एक बार जब JAR फ़ाइल स्थापित हो जाती है, तो आपका मैवेन रेपो कोड रिपॉजिटरी के लिए प्रतिबद्ध हो सकता है, और पूरा सेट-अप सिस्टम स्वतंत्र होता है। ( GitHub में काम करने का उदाहरण )।

मैं मानता हूं कि स्रोत कोड रेपो के लिए JAR का होना अच्छा अभ्यास नहीं है, लेकिन वास्तविक जीवन में, त्वरित और गंदे समाधान एक JAR की मेजबानी करने के लिए पूर्ण विकसित नेक्सस रेपो की तुलना में कभी-कभी बेहतर होते हैं जिन्हें आप प्रकाशित नहीं कर सकते।



4
यदि आप इसे pom.xml में करना चाहते हैं, तो baeldung.com/install-local-jar-with-maven पर देखें
काई वांग

@ कै वांग यह समाधान बेहतर तरीके से काम करता है! आपको शायद इसे उत्तर के रूप में जोड़ना चाहिए।
16

6
चूँकि ${project.parent.basedir}आजकल मैं किसी भी चीज़ का समाधान नहीं करता ${project.basedir}/..और मैं पूरी तरह से काम करता हूँ।
इम्पेलर

1
एक टिप: कृपया $ HOME / .m2 / settings.xml की जाँच करें "से बचें" स्थानीय-मावेन-रेपो "सेटिंग्स / दर्पण / दर्पण द्वारा प्रतिबिंबित किया जाता है <mirrorOf>*</mirrorOf>
btpka3

125

एक नया फ़ोल्डर बनाएँ, चलो local-maven-repoअपने मावेन प्रोजेक्ट के मूल में कहें ।

बस अपने अंदर एक स्थानीय रेपो जोड़ने <project>अपने की pom.xml:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.basedir}/local-maven-repo</url>
    </repository>
</repositories>

फिर प्रत्येक बाहरी जार के लिए जिसे आप स्थापित करना चाहते हैं, अपनी परियोजना के मूल में जाएं और निष्पादित करें:

mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]

16
यह यहाँ पर एकमात्र सही उत्तर है क्योंकि यह तैनाती का उपयोग करते समय आपके रेपो को सही ढंग से बनाएगा।
ऑप्टिकली

यदि यह कोड CI बिल्ड सर्वर का उपयोग करके तैनात किया जाता है तो क्या यह दृष्टिकोण काम करेगा? ऐसा लगता है कि स्वचालित बिल्ड पर निर्भरता तक पहुंच नहीं होगी।
वालेस होवेरी

2
@ user2748659 यदि आपके सीआई में सर्वर का निर्माण होता है, तो local-maven-repoआपके स्रोत फ़ोल्डर में फ़ोल्डर शामिल है (इस उदाहरण में एक बच्चे के रूप में)
एंथनी ओ।

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

2
ध्यान दें कि ऐसा करने के लिए आपको जोड़ने के लिए -पैकेजिंग = जार की आवश्यकता हो सकती है। अन्यथा आपको "विरूपण साक्ष्य अधूरा या अमान्य है: पैकेजिंग गायब है"।
जे वुडचुक

43

मैं इस तरह के समाधान चाहते हैं - maven-install-pluginpom फ़ाइल में उपयोग करें :

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <file>lib/yourJar.jar</file>
                <groupId>com.somegroup.id</groupId>
                <artifactId>artefact-id</artifactId>
                <version>x.y.z</version>
                <packaging>jar</packaging>
            </configuration>
        </execution>
    </executions>
</plugin>

इस मामले में आप प्रदर्शन कर सकते हैं mvn initializeऔर जार स्थानीय मावेन रेपो में स्थापित किया जाएगा। अब यह जार इस मशीन पर किसी भी मावेन कदम के दौरान उपलब्ध है ( <dependency></dependency>टैग के साथ पोम में किसी अन्य मावेन निर्भरता के रूप में इस निर्भरता को शामिल करना न भूलें )। यह भी संभव है कि जार को न बांधें initialize, न कि किसी और कदम पर, जिसे आप पसंद करते हैं।


2
यह मेरे लिए अच्छी तरह से काम करता है, लेकिन केवल अगर मैं mvn initializeपहले चलाता हूं mvn package: मैं नहीं कर सकता mvn initialize packageया तो यह केंद्रीय रेपो से जार डाउनलोड करने की कोशिश करता है। ऐसा क्यों है? मुझे लगा कि यह इस लक्ष्य / चरणों को क्रम से चलाएगा।
डेविड जनस

1
दरअसल, उन्हें क्रम में चलाया जाना चाहिए। डिफ़ॉल्ट जीवनचक्र की सूची पर एक नज़र डालें: maven.apache.org/guides/introduction/… आप बाइंड करने के लिए किसी अन्य चरण का उपयोग कर सकते हैं।
sphinks

2
मैंने हर तरीका आजमाया, लेकिन अंत में मुझे इस समाधान का सहारा लेना पड़ा। मुख्य कारण है, मैं स्थानीय रूप से संकुल को ऑफ़लाइन मोड में बनाने में सक्षम होना चाहता था। अगर मैंने इसे स्थानीय रूप से परिभाषित रिपॉजिटरी के साथ एक निर्भरता के रूप में घोषित किया, तो यह हमेशा एक और ऑनलाइन रेपो के रूप में माना जाता था और मावेन बिल्ड ने कलाकृतियों को ठीक नहीं करने के बारे में शिकायत की थी। यह समाधान हर मामले के लिए ठीक काम करता है।
मौली

2
मुझे लगता है कि स्वच्छ चरण का उपयोग करना बेहतर है क्योंकि प्रारंभिक हर बार निष्पादित किया जाएगा जब हम mvan पैकेज का उपयोग करते हैं जब इसके अनावश्यक। अंत में अगर हमें केवल जार / वॉर जेनरेट करना है तो हम सीधे mvan क्लीन पैकेज का उपयोग कर सकते हैं ।
डेओक्सीज़िया

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

29
<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>

6
<scope>systemअब पदावनत कर दिया गया है।
गेरोल्डब्रोज़र मोनिका

@GeroldBroser - ठीक है। हम इसके बजाय क्या उपयोग कर सकते हैं?
मास्टरजेओ 2

2
@ MasterJoe2 जैसा कि स्थानीय रेपो के लिए स्वीकृत उत्तर में उल्लिखित है install:install-fileऔर इसे "सामान्य" निर्भरता (डिफ़ॉल्ट गुंजाइश के साथ compile) के रूप में उपयोग करते हैं या इन-प्रोजेक्ट रिपॉजिटरी समाधान का उपयोग करते हैं
GeroldBroser ने मोनिका

15

हाँ, आपके पास हो सकता है लेकिन इसका विचार अच्छा नहीं है।

इसके बजाय इन सभी जार को रिपॉज करने के लिए स्थापित करें

और देखें


14

वास्तव में त्वरित और गंदा तरीका एक स्थानीय फ़ाइल को इंगित करना है:

<dependency>
      <groupId>sample</groupId>  
       <artifactId>com.sample</artifactId>  
       <version>1.0</version> 
      <scope>system</scope>
      <systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>

हालाँकि यह केवल आपकी मशीन (जाहिर है) पर रहेगा, इसे साझा करने के लिए आमतौर पर एक उचित एम 2 संग्रह (नेक्सस / आर्टिफैक्ट) का उपयोग करने के लिए समझ में आता है या यदि आपके पास इनमें से कोई भी नहीं है या एक स्थानीय मैवेन सेट नहीं करना चाहता है संरचित संग्रह और अपने pom में "रिपॉजिटरी" कॉन्फ़िगर करें: स्थानीय:

<repositories>
    <repository>
        <id>my-local-repo</id>
        <url>file://C:/DEV//mymvnrepo</url>
    </repository>
</repositories>

दूरस्थ:

<repositories>
    <repository>
        <id>my-remote-repo</id>
        <url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
    </repository>
</repositories>

इसके लिए एक सापेक्षिक पथ भी संभव है जिसका उपयोग अंडरएर चर का उपयोग करके किया जा सकता है:

<url>file:${basedir}</url>

स्थानीय रिपॉजिटरी URL के लिए, क्या वे सापेक्ष हो सकते हैं या वे निरपेक्ष होने चाहिए?
ड्रैगस

@ डेग्रस मैंने कोशिश नहीं की है, कृपया हमें बताएं कि क्या आपने किया।
fl0w

1
हाँ, स्पष्ट रूप से आपको <url>file:${basedir}</url>इसके बजाय बेस यूआरएल के रूप में उपयोग करने की आवश्यकता है ।
ड्रैगस

11

POM फ़ाइल में अपना स्थानीय JAR जोड़ें और मावेन बिल्ड में इसका उपयोग करें।

mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar

उदाहरण के लिए:

mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar

फिर इसे इस तरह POM में जोड़ें:

यहां छवि विवरण दर्ज करें


मुझे विरूपण साक्ष्य स्थापित करने में असफल रहा (एक्सेस अस्वीकृत)। इसे कैसे हल किया जा सकता है? @ अनुरास्फियर
रमज़ाह रहमान

1
@RamzahRehman राइट क्लिक करके admi विशेषाधिकारों के साथ कमांड प्रॉम्प्ट खोलने का प्रयास करें और फिर "Run as एडमिनिस्ट्रेटर" चुनें
Aurasphere

9

एक तरीका यह है कि आप इसे अपने मावेन रिपॉजिटरी मैनेजर (जैसे नेक्सस) में अपलोड करें। वैसे भी खुद का भंडार प्रबंधक रखना अच्छा है।

एक और अच्छा तरीका जो मैंने हाल ही में देखा है, वह है अपनी बिल्ड लाइफसाइकल में मावेन इंस्टॉल प्लगइन को शामिल करना: आप स्थानीय रिपॉजिटरी में फाइल को स्थापित करने के लिए पोम में घोषणा करते हैं। यह एक छोटा लेकिन छोटा ओवरहेड है और इसमें कोई मैनुअल कदम शामिल नहीं है।

http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html


4
समाप्ति पर स्विच करने के साथ समाप्त होता है। यह काम नहीं करता है यदि स्थानीय जार को निर्भरता के रूप में परिभाषित किया गया है, तो मावेन निर्भरता को हल करने से पहले प्लगइन्स को निष्पादित नहीं करेगा, मैन्युअल इंस्टॉलेशन अपरिहार्य है। इस स्थिति के बारे में एक
असंतोष

7

बेशक आप उस फोल्डर में जार जोड़ सकते हैं। लेकिन शायद यह नहीं है कि आप क्या हासिल करना चाहते हैं ...

यदि आपको संकलन के लिए इन जार की आवश्यकता है, तो इस संबंधित प्रश्न की जांच करें: क्या मैं जार को जोड़ने के लिए उन्हें बनाने के बिना 2 निर्माण वर्गपथ जोड़ सकता हूं?

इसके अलावा, इससे पहले कि कोई इसे सुझाए, सिस्टम स्कोप का उपयोग न करें।


6

एक और दिलचस्प मामला यह है कि जब आप अपनी परियोजना में निजी मावेन जार रखना चाहते हैं। आप परिवर्तनशील निर्भरता को हल करने के लिए मावेन की क्षमताओं को बनाए रखना चाह सकते हैं। समाधान काफी आसान है।

  1. अपनी परियोजना में एक फ़ोल्डर libs बनाएं
  2. अपनी pom.xml फ़ाइल में निम्न पंक्तियाँ जोड़ें

    <properties><local.repository.folder>${pom.basedir}/libs/</local.repository.folder>
    </properties>
    
    <repositories>
       <repository>
            <id>local-maven-repository</id>
            <url>file://${local.repository.folder}</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
       </repository>
    </repositories>
  3. खोलें .m2 / भंडार फ़ोल्डर और में आयात करने के लिए परियोजना की निर्देशिका संरचना आप चाहते हैं कॉपी libs फ़ोल्डर।

उदाहरण के लिए, आप निर्भरता को आयात करना चाहते हैं

<dependency>
    <groupId>com.mycompany.myproject</groupId>
    <artifactId>myproject</artifactId>
    <version>1.2.3</version>
</dependency>

बस .m2 / रिपॉजिटरी पर जाएं और आपको निम्न फ़ोल्डर दिखाई देगा

com / mycompany / MyProject / 1.2.3

अपने libs फ़ोल्डर में सब कुछ कॉपी करें (फिर से, .m2 / रिपॉजिटरी के तहत फ़ोल्डर्स सहित ) और आप कर रहे हैं।


6

कमांड लाइन :

mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion={version} -Dpackaging=jar

5

निर्भरता में महत्वपूर्ण हिस्सा है: $ {pom.basedir} (सिर्फ $ {आधारित आधार के बजाय)}

<dependency>
    <groupId>org.example</groupId>
    <artifactId>example</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${pom.basedir}/src/lib/example.jar</systemPath>
</dependency>

4

मुझे लगता है कि इस समस्या का एक बेहतर समाधान मावेन-इंस्टॉल-प्लगइन का उपयोग करके स्वचालित रूप से स्थापित समय पर फ़ाइलों को स्थापित करना है। इसे मैंने अपने प्रोजेक्ट के लिए सेट किया है।

सबसे पहले, संपत्ति के रूप में पथ (जहां आप स्थानीय .jars संग्रहीत करते हैं) को जोड़ें।

<properties>
    <local.sdk>/path/to/jar</local.sdk>
</properties>

फिर, pluginsसंकलन करते समय जार स्थापित करने के लिए एक प्लगइन जोड़ें।

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>1</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId> 
                <artifactId>appengine-api</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api.jar</file>
            </configuration>
        </execution>
        <execution>
            <id>appengine-api-stubs</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId>
                <artifactId>appengine-api-stubs</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api-stubs.jar</file>
            </configuration>
        </execution>
    </executions>
</plugin>

अंत में, निर्भरता में, आप जार जोड़ सकते हैं

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api</artifactId>
    <version>1.0</version>
</dependency>

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api-stubs</artifactId>
    <version>1.0</version>
    <scope>test</scope>
</dependency>

अपने प्रोजेक्ट को इस तरह सेट करके, प्रोजेक्ट तब भी बनते रहेंगे जब आप इसे दूसरे कंप्यूटर पर ले जाते हैं (यह देखते हुए कि इसमें प्रॉपर्टी द्वारा निर्दिष्ट पथ में सभी जार फाइलें हैं local.sdk)।

के लिए groupIdउपयोग एक अद्वितीय नाम सिर्फ यकीन है कि कोई संघर्ष देखते हैं कि बनाने के लिए।

अब जब आप mvn installया mvn testस्थानीय जार स्वचालित रूप से जुड़ जाएंगे।


3

पसंदीदा तरीका यह होगा कि आप अपना रिमोट रिपॉजिटरी बनाएं।

इसे कैसे करना है, इसके विवरण के लिए यहां देखें । ' दूरस्थ रिपॉजिटरी पर अपलोड ' अनुभाग पर एक नजर है ।


3

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

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;

public class CreateMavenRepoApp {

    private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars";

    public static void main(String[] args) throws IOException {

    File directory = new File();
    //get all the files from a directory
    PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8");
    writer.println("rem "+ new Date());  
    File[] fList = directory.listFiles();
    for (File file : fList){
        if (file.isFile()){               
        String absolutePath = file.getAbsolutePath() ;
        Manifest  m = new JarFile(absolutePath).getManifest();
        Attributes attributes = m.getMainAttributes();
        String symbolicName = attributes.getValue("Bundle-SymbolicName");

        if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) {
            String[] parts =symbolicName.split("\\.");
            String artifactId = parts[parts.length-1];
            String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);
            String version = attributes.getValue("Bundle-Version");
            String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
            writer.println(mavenLine);          
        }

        }
    }
    writer.close();
    }

}

किसी भी IDE से इस मुख्य को चलाने के बाद, update_repo_maven.bat चलाएं।


आपका कोड String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))इंगित करता है कि केवल कस्टम जार का समर्थन किया जाएगा। कि हमें क्या जरूरत नहीं है: इसके बजाय तीसरे पक्ष के जार का एक गुच्छा। क्या आपके पास सुझाव है कि इस तरह से किसी भी जार को कैसे स्थापित किया जाए ?
जावदबा २०

मैंने आपका कोड तय कर दिया है: मैंने नीचे एक उत्तर दिया।
जावदबा २ j

3

यह नए संस्करणों के लिए एक छोटा वाक्यविन्यास है:

mvn install:install-file -Dfile=<path-to-file>

यह काम करता है जब जार अपाचे मावेन द्वारा बनाया गया था - सबसे आम मामला। तब इसमें मेटा-इन डायरेक्टरी के सबफ़ोल्डर में एक pom.xml होगा, जिसे डिफ़ॉल्ट रूप से पढ़ा जाएगा।

स्रोत: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html


2

इस पर भी एक नजर ...

<scope>compile</scope>

मावेन निर्भरता । यह डिफ़ॉल्ट है, लेकिन मैंने कुछ मामलों में स्पष्ट रूप से उस गुंजाइश को स्थापित किया है जो मावेन को स्थानीय भंडार में स्थानीय पुस्तकालयों को खोजने के लिए भी है।


2

किसी कारण से, मैं जिस वेब एप्लिकेशन का रखरखाव कर रहा हूं, उसमें न तो एलिरेज़ा फताही का समाधान है और न ही जे जे रोमन के समाधान ने सही तरीके से काम किया है। दोनों मामलों में, संकलन ठीक हो जाता है (यह जार देखता है), लेकिन पैकेजिंग जार को युद्ध के अंदर शामिल करने में विफल रहता है।

जिस तरह से मैं इसे बनाने में कामयाब रहा वह जार को लगाकर /src/main/webapp/WEB-INF/lib/और फिर इसे फतहिस या रोमन के समाधान के साथ जोड़कर किया गया।


1

ध्यान दें कि स्थानीय रेपो का उपयोग करना आवश्यक नहीं है। यदि यह परियोजना दूसरों के साथ साझा की जाती है, तो बाकी सभी को समस्याएँ और सवाल होंगे जब यह काम नहीं करता है, और जार आपके कंप्यूटर नियंत्रण प्रणाली में भी उपलब्ध नहीं होगा!

हालांकि साझा रेपो सबसे अच्छा जवाब है, अगर आप किसी कारण से ऐसा नहीं कर सकते हैं तो जार को एम्बेड करना स्थानीय रेपो से बेहतर है। स्थानीय-केवल रेपो सामग्री बहुत सारी समस्याओं का कारण बन सकती है, विशेष रूप से समय के साथ।


1
यदि आप स्रोत नियंत्रण प्रणाली में जार जोड़ते हैं तो पुस्तकालय हमेशा स्रोत के साथ मिलेंगे। कोई स्रोत नहीं, कोई पुस्तकालय नहीं। मावेन के बजाय स्रोत ठीक हो सकता है लेकिन रिपॉजिटरी अनुपलब्ध है।
सूरह.फेरगूसन

@ फ्रेंक ... बाहरी निर्भरता (लाइब्रेरी फ़ाइलों) को शामिल किए बिना निष्पादन योग्य जार बनाने के बारे में कोई विचार?
सतीश करुतुरी

किसी के लिए मावेन करने के लिए, और मूल प्रश्न के उत्तर की तलाश में, "जार को एम्बेड करना" का क्या अर्थ है?
cdock 16

1

अपने स्थानीय भंडार पर आप आदेश जारी करके अपने जार को स्थापित कर सकते हैं

 mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

Mkyoung की वेबसाइट से भी ऐसा करने के लिए इस उपयोगी लिंक का अनुसरण करें। आप उसी के लिए मावेन गाइड भी देख सकते हैं



1
  1. mvan इंस्टॉल करें

आप कमांड लाइन में नीचे कोड लिख सकते हैं या यदि आप प्रोजेक्ट पर राइट-क्लिक करके निर्मित बिल्व पत्र का उपयोग कर रहे हैं -> रन अस -> रन कॉन्फ़िगरेशन ... -> बाएं पैनल में दाएं क्लिक करें मावेन बिल्ड -> नया कॉन्फ़िगरेशन -> राइट लिखें लक्ष्य और आधार निर्देशिका में कोड: $ {project_loc: NameOfYourProject} -> चलाएँ

mvn install:install-file
   -Dfile=<path-to-file>
   -DgroupId=<group-id>
   -DartifactId=<artifact-id>
   -Dversion=<version>
   -Dpackaging=<packaging>
   -DgeneratePom=true

जहां प्रत्येक को संदर्भित करता है:

<path-to-file>: फ़ाइल को लोड करने का पथ जैसे -> c: \ kaptcha-2.3.jar

<group-id>: वह समूह जिसे फ़ाइल को पंजीकृत किया जाना चाहिए जैसे -> com.google.code

<विरूपण साक्ष्य-आईडी>: फ़ाइल के लिए विरूपण साक्ष्य नाम जैसे -> kaptcha

<संस्करण>: फ़ाइल का संस्करण जैसे -> 2.3

<पैकेजिंग>: फ़ाइल की पैकेजिंग जैसे -> जार

2. स्थापित होने के बाद, बस pom.xml में जार घोषित करता है।

 <dependency>
      <groupId>com.google.code</groupId>
      <artifactId>kaptcha</artifactId>
      <version>2.3</version>
 </dependency>

1

चरण 1: अपने में maven-install-pluginलक्ष्य के साथ कॉन्फ़िगर install-fileकरेंpom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <executions>
        <execution>
            <id>install-external-non-maven-jar-MWS-Client-into-local-maven-repo</id>
            <phase>clean</phase>
            <configuration>
                <repositoryLayout>default</repositoryLayout>
                <groupId>com.amazonservices.mws</groupId>
                <artifactId>mws-client</artifactId>
                <version>1.0</version>
                <file>${project.basedir}/lib/MWSClientJavaRuntime-1.0.jar</file>
                <packaging>jar</packaging>
                <generatePom>true</generatePom>
            </configuration>
            <goals>
                <goal>install-file</goal>
            </goals>
        </execution>
    </executions>
</plugin>

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

यदि आपके पास कई बाहरी जार हैं, <execution>तो उसी के भीतर अन्य जार के लिए दोहराएं maven-install-plugin

चरण 2: एक बार जब आप maven-install-pluginअपनी pom.xmlफ़ाइल में ऊपर दिखाए अनुसार कॉन्फ़िगर कर लेते हैं, तो आपको इन जार pom.xmlको हमेशा की तरह उपयोग करना होगा:

    <dependency>
        <groupId>com.amazonservices.mws</groupId>
        <artifactId>mws-client</artifactId>
        <version>1.0</version>
    </dependency>

ध्यान दें कि maven-install-pluginकेवल आपके बाहरी जार को आपके स्थानीय .m2मावेन भंडार में कॉपी करता है। बस। यह स्वचालित रूप से आपकी परियोजना के लिए मावेन निर्भरता के रूप में इन जार को शामिल नहीं करता है।

यह एक मामूली बात है, लेकिन कभी-कभी याद करना आसान होता है।


0

मेरे pom.xml में निर्भरता के एक सेट के लिए एक ही त्रुटि थी। बाहर निर्भरता के संस्करणों को pom.xml में निर्दिष्ट नहीं किया गया था और मूल रिपॉजिटरी में उल्लेख किया गया था। किसी कारण से संस्करण विवरण इस रेपो के साथ समन्वयित नहीं हो रहा था। इसलिए मैंने मैन्युअल रूप से टैग का उपयोग करके संस्करणों में प्रवेश किया और यह एक आकर्षण की तरह काम किया। माता-पिता में संस्करणों को देखने और यहां निर्दिष्ट करने के लिए बहुत कम समय की आवश्यकता होती है। लेकिन यह सिर्फ उन जार के लिए किया जा सकता है जो कलाकृतियों की त्रुटि दिखा रहे हैं और यह काम करता है। आशा है कि यह किसी की मदद करता है।


0

Apache Maven 3.5.4 में, मुझे दोहरा उद्धरण जोड़ना था। दोहरे उद्धरण के बिना मेरे लिए काम नहीं किया गया था।

उदाहरण: mvan install: install-file "-Dfile = location to jar file" "-DgroupId = group id" "-DartifactId = विरूपण साक्ष्य आईडी" "-Dversion = संस्करण" "-Dpack_ = = पैकेज प्रकार"


0
  1. एक स्थानीय मावेन रिपॉजिटरी निर्देशिका बनाएं, आपकी परियोजना की जड़ कुछ इस तरह दिखनी चाहिए:
yourproject
+- pom.xml
+- src
  1. समूह com.example और संस्करण 1.0 के लिए रेपो नामक मानक Maven रिपॉजिटरी निर्देशिका जोड़ें:
yourproject
+- pom.xml
+- src
+- repo
  1. रेपो में आर्टवर्क को तैनात करें, मावेन आपके लिए विरूपण साक्ष्य को तैनात कर सकते हैं: तैनाती फ़ाइल लक्ष्य:
mvn deploy:deploy-file -Durl=file:///pathtoyour/repo -Dfile=your.jar -DgroupId=your.group.id -DartifactId=yourid -Dpackaging=jar -Dversion=1.0
  1. अपने जार के लिए पोम फाइल स्थापित करें ताकि आपकी परियोजना स्थानीय रेपो से मावेन निर्माण के दौरान जार पा सके:
mvn install:install-file -Dfile=/path-to-your-jar-1.0.jar -DpomFile=/path-to-your-pom-1.0.pom
  1. अपने pom फ़ाइल में रेपो जोड़ें:
<repositories>
    <!--other repositories if any-->
    <repository>
        <id>project.local</id>
        <name>project</name>
        <url>file:${project.basedir}/repo</url>
    </repository>
</repositories>
  1. अपने पोम में निर्भरता जोड़ें:
<dependency>
    <groupId>com.groupid</groupId>
    <artifactId>myid</artifactId>
    <version>1.0</version>
</dependency>

-2

इस उपयोगकर्ता केवल उपयोगकर्ताओं के लिए है:

यदि आप ग्रहण का उपयोग कर रहे हैं, तो जार को लिब / में रखें, जार नाम पर राइट क्लिक करें और "ऐड टू बिल्ड पाथ" पर क्लिक करें। ग्रहण एक "संदर्भित पुस्तकालय" बनाएगा और आपके लिए जार रखेगा

इसने मेरे लिए कार्यक्रम में तुरंत जार के आयात को हल किया


5
यह ग्रहण में प्रवेश को जोड़ देगा .classpath, लेकिन आपके mvn packageमावेन बिल्ड ब्रॉकिट होगा एक बार जब आप उस निर्भरता का उपयोग करना शुरू कर देंगे, क्योंकि मावेन की कोई परिभाषा नहीं है, और यह केवल में होना चाहिएpom.xml
पॉल वेरेस्ट

हाँ, आप सही हैं, पैकेज में स्थानीय जार शामिल नहीं होगा। लेकिन मैंने इस सवाल का जवाब दिया, इसे एक परियोजना में कैसे जोड़ा जाए (ग्रहण तरीके से)।
आनंदकुमार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.