दिलचस्प पोस्ट
एंड्रॉइड ऐप और वेबसर्वर के बीच डेटा को सिंक करें उच्चचर्ट श्रृंखला के लिए अतिरिक्त डेटा सेट करें कैसे मानक बॉर्डरलेस बटन बनाने के लिए (जैसे कि डिजाइन दिशानिर्देश में उल्लेख किया गया है)? सरणी सूचकांक के बजाय इटरेटर का उपयोग क्यों करें? कैसे jQuery के प्रत्येक लूप को तोड़ने के लिए पायथन एरे कैसे बड़ा हो सकता है? C ++ फ़ंक्शन से एकाधिक मान लौटाना JQuery में हर 5 सेकंड फ़ंक्शन को कॉल करने का सबसे आसान तरीका क्या है? iframe से अभिभावक में Fancybox को कॉल करें लॉलीपॉप: स्थिति के पीछे खींचें रंग अपने रंग के साथ पारदर्शी पर सेट करें एंड्रॉइड डिवाइस में डेटा / डेटा फ़ोल्डर का उपयोग कैसे करें? COUNT (*) बनाम COUNT (1) बनाम COUNT (पीके): जो बेहतर है? SQLite में AUTOINCREMENT के लिए प्रारंभ मूल्य सेट करें स्ट्रिंग में किसी वर्ण की सभी घटनाओं को कैसे बदलना है? आधुनिक सी ++ में क्लासिक सॉर्टिंग एल्गोरिदम कैसे कार्यान्वित करें?

क्या मैं इन्हें स्थापित करने के बिना मेहर 2 बिल्ड क्लासपाथ को जार जोड़ सकता हूं?

Maven2 मुझे प्रयोग के दौरान पागल हो रही है / विकास के त्वरित और गंदे नकली अप चरण।

मेरे पास एक pom.xml फ़ाइल है जो वेब-ऐप ढांचे के उपयोग के लिए निर्भरता को परिभाषित करती है, और मैं उस फ़ाइल से स्टार्टर प्रोजेक्ट को तुरंत जनरेट कर सकता हूं। हालांकि, कभी-कभी मैं एक तृतीय पक्ष पुस्तकालय से लिंक करना चाहता हूं जो कि पहले से कोई pom.xml फ़ाइल नहीं है, इसलिए तीसरे पक्ष के pom.xml लिए pom.xml फ़ाइल को हाथ से स्थापित करने और उसे स्थापित करने और निर्भरता को जोड़ने के बजाय मेरी pom.xml , मैं सिर्फ मावेन को बताना चाहूंगा: "मेरी परिभाषित निर्भरता के अलावा, किसी जार में भी /lib भी शामिल है।"

ऐसा लगता है कि यह आसान होना चाहिए, लेकिन अगर ऐसा है, तो मुझे कुछ याद आ रहा है

यह कैसे करना है पर कोई संकेत बहुत सराहना कर रहे हैं उस में से कुछ, यदि एक /lib निर्देशिका में maven को इंगित करने का एक आसान तरीका है और आसानी से एक एकल निर्भरता के लिए मैप किए गए सभी संलग्न जारों के साथ एक pom.xml बना सकते हैं, जिसे मैं तब नाम / स्थापित कर सकता था और एक में झुका हुआ गिर सकता था भी पर्याप्त है

वेब के समाधान से एकत्रित समाधान "क्या मैं इन्हें स्थापित करने के बिना मेहर 2 बिल्ड क्लासपाथ को जार जोड़ सकता हूं?"

लोकप्रिय दृष्टिकोण की समस्याएं

इंटरनेट के चारों ओर दिए जाने वाले अधिकांश उत्तर आपको अपने स्थानीय भंडार में निर्भरता स्थापित करने या pom में "सिस्टम" क्षेत्र को निर्दिष्ट करने और अपनी परियोजना के स्रोत के साथ निर्भरता को वितरित करने का सुझाव देंगे। लेकिन इन दोनों समाधान वास्तव में दोषपूर्ण हैं।

आपको "स्थानीय रेपो स्थापित करें" दृष्टिकोण क्यों लागू नहीं करना चाहिए

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

आपको "सिस्टम स्कोप" दृष्टिकोण क्यों लागू नहीं करना चाहिए

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

स्थैतिक इन-प्रोजेक्ट रिपॉज़िटरी समाधान

इसे अपने pom में डालने के बाद:

 <repository> <id>repo</id> <releases> <enabled>true</enabled> <checksumPolicy>ignore</checksumPolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> <url>file://${project.basedir}/repo</url> </repository> 

xyz मेवेन के एक समूह आईडी के साथ प्रत्येक xyz लिए कलाकृतियों के लिए अपनी खोज में आपकी प्रोजेक्ट डायर के अंदर निम्नलिखित स्थान शामिल होगी:

 repo/ | - x/ | | - y/ | | | - z/ | | | | - ${artifactId}/ | | | | | - ${version}/ | | | | | | - ${artifactId}-${version}.jar 

इस पर अधिक विस्तार करने के लिए आप इस ब्लॉग पोस्ट को पढ़ सकते हैं।

रेपो परियोजना को स्थापित करने के लिए मेवेन का उपयोग करें

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

 mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...] 

यदि आप इस दृष्टिकोण को चुनते हैं तो आप pom में रिपॉजिटरी घोषणा को सरल बनाने में सक्षम होंगे:

 <repository> <id>repo</id> <url>file://${project.basedir}/repo</url> </repository> 

सहायक सहायक स्क्रिप्ट

प्रत्येक लिबिल के लिए इंस्टॉलेशन कमांड निष्पादित करने से थोड़े परेशान और निश्चित रूप से त्रुटि प्रवण है, मैंने एक यूटिलिटी स्क्रिप्ट बनाई है जो स्वचालित रूप से सभी जारों को एक प्रोजेक्ट रिपॉजिटरी में स्थापित करता है, जबकि स्वचालित रूप से सभी मेटाडेटा (समूह आईडी, आर्टिफैक्ट आईडी आदि) को हल करता है। फाइलों के नाम से स्क्रिप्ट आपके निर्भरता XML को आपके pom में कॉपी-पेस्ट करने के लिए भी प्रिंट करता है।

अपने लक्ष्य पैकेज में निर्भरताएं शामिल करें

जब आप अपनी इन-प्रोजेक्ट रिपॉजिटरी बनाई जाएंगे, तो आप इसके स्रोत के साथ परियोजना की निर्भरताएं बांटने की समस्या हल करेंगे, लेकिन उसके बाद से आपके प्रोजेक्ट का लक्षित आर्टिफैक्ट गैर-प्रकाशित जारों पर निर्भर करेगा, इसलिए जब आप इंस्टॉल करेंगे यह एक रिपॉजिटरी के लिए होगा, इसमें अनारोलवयबल निर्भरताएं होंगी।

इस समस्या को हरा करने के लिए मैं आपके लक्ष्य पैकेज में इन निर्भरताओं को शामिल करने का सुझाव देता हूं। यह आप या तो विधानसभा प्लगइन के साथ या वनजार प्लगइन के साथ बेहतर कर सकते हैं। वनजार पर आधिकारिक दस्तावेज समझना आसान है।

फेंक करने के लिए कोड केवल

गुंजाइश सेट करें == प्रणाली और बस एक समूह आईडी, आर्टिफैक्ट आईडी, और संस्करण बनाओ

 <dependency> <groupId>org.swinglabs</groupId> <artifactId>swingx</artifactId> <version>0.9.2</version> <scope>system</scope> <systemPath>${project.basedir}/lib/swingx-0.9.3.jar</systemPath> </dependency> 

नोट: सिस्टम निर्भरता परिणामस्वरूप जार / युद्ध में प्रतिलिपि नहीं की गई हैं
(देखें कि कैसे मेवेन का उपयोग कर युद्ध में सिस्टम निर्भरता को शामिल किया गया है )

आप अपने प्रोजेक्ट पर स्थानीय रिपॉजिटरी बना सकते हैं

उदाहरण के लिए यदि आपके पास परियोजना संरचना में libs फ़ोल्डर है

  • libs फ़ोल्डर में आपको निर्देशिका संरचना को बनाना चाहिए: /groupId/artifactId/version/artifactId-version.jar

  • आपके pom.xml में आपको रिपॉजिटरी रजिस्टर करना चाहिए

     <repository> <id>ProjectRepo</id> <name>ProjectRepo</name> <url>file://${project.basedir}/libs</url> </repository> 
  • और हमेशा की तरह निर्भरता जोड़ें

     <dependency> <groupId>groupId</groupId> <artifactId>artifactId</artifactId> <version>version</version> </dependency> 

बस इतना ही।

विस्तृत जानकारी के लिए: मैवेन में बाहरी पुस्तकालयों को कैसे जोड़ें

नोट: सिस्टम स्कोप का उपयोग करते समय ( इस पृष्ठ पर उल्लेखित ), मेवेन को पूर्ण पथ की आवश्यकता है

यदि आपकी जार आपके प्रोजेक्ट की जड़ के नीचे है, तो आप $ {basically} के साथ अपने सिस्टमपैथ मानों को प्रीफ़िक्स करना चाहते हैं।

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

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

यह मैंने किया है, यह पैकेज के मुद्दे के आसपास काम करता है और यह चेक आउट कोड के साथ काम करता है।

मैंने प्रोजेक्ट में एक नया फ़ोल्डर बनाया, मेरे मामले में मैंने repo इस्तेमाल किया, लेकिन src/repo का उपयोग करने के लिए स्वतंत्र महसूस करें

मेरे पोम में मेरी कोई निर्भरता थी जो किसी भी सार्वजनिक मेवेन रिपॉजिटरी में नहीं थी

 <dependency> <groupId>com.dovetail</groupId> <artifactId>zoslog4j</artifactId> <version>1.0.1</version> <scope>runtime</scope> </dependency> 

मैंने फिर निम्नलिखित निर्देशिकाओं को repo/com/dovetail/zoslog4j/1.0.1 और उस फ़ोल्डर में जेआर फ़ाइल की नकल की।

मैंने डाउनलोड की गई फ़ाइल का प्रतिनिधित्व करने के लिए निम्न पीओएम फ़ाइल बनाई है (यह कदम वैकल्पिक है, लेकिन यह एक चेतावनी को निकालता है) और अगले व्यक्ति को यह पता करने में मदद करता है कि मुझे फ़ाइल को किस प्रकार से शुरू करना है

 <?xml version="1.0" encoding="UTF-8" ?> <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.dovetail</groupId> <artifactId>zoslog4j</artifactId> <packaging>jar</packaging> <version>1.0.1</version> <name>z/OS Log4J Appenders</name> <url>http://dovetail.com/downloads/misc/index.html</url> <description>Apache Log4j Appender for z/OS Logstreams, files, etc.</description> </project> 

मैं बना दो वैकल्पिक फाइलें पीओएम और जेएआर के लिए एसएचए 1 चेकसम हैं जो लापता चेकसम चेतावनियों को हटाने के लिए हैं I

 shasum -b < repo/com/dovetail/zoslog4j/1.0.1/zoslog4j-1.0.1.jar \ > repo/com/dovetail/zoslog4j/1.0.1/zoslog4j-1.0.1.jar.sha1 shasum -b < repo/com/dovetail/zoslog4j/1.0.1/zoslog4j-1.0.1.pom \ > repo/com/dovetail/zoslog4j/1.0.1/zoslog4j-1.0.1.pom.sha1 

अंत में मैं निम्नलिखित टुकड़ा अपने pom.xml में जोड़ता हूं जो मुझे स्थानीय भंडार का संदर्भ देता है

 <repositories> <repository> <id>project</id> <url>file:///${basedir}/repo</url> </repository> </repositories> 

इस तरह हम स्थानीय जार को जोड़ते हैं या स्थापित करते हैं

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

मैंने कुछ डिफॉल्ट समूह आईडीआईडी ​​और आर्टिफैक्ट आईडी दिया क्योंकि वे अनिवार्य हैं 🙂

<scope>system</scope> का उपयोग करना दूसरों के द्वारा समझाए गए कारणों के लिए एक भयानक विचार है, फ़ाइल को मैन्युअल रूप से अपने स्थानीय रिपॉजिटरी में स्थापित करने से बिना किसी अपरिपक्व निर्माण का निर्माण होता है और <url>file://${project.basedir}/repo</url> एक अच्छा विचार नहीं है, क्योंकि (1) यह एक अच्छी तरह से बनाई गई file यूआरएल नहीं हो सकती (उदाहरण के लिए यदि परियोजना को असामान्य वर्णों के साथ एक निर्देशिका में चेक आउट किया गया है), (2) नतीजतन यह परियोजना पीओएम किसी और की प्रोजेक्ट की निर्भरता के रूप में उपयोग किया जाता है

यह मानते हुए कि आप एक जन रिपॉजिटरी में कलाकृति को अपलोड करने के लिए तैयार नहीं हैं, शिमोन के सहायक मॉड्यूल के सुझाव नौकरी करते हैं। लेकिन अब एक आसान तरीका है …

सिफारिश

गैर- maven-jar-maven-plugin का उपयोग करें क्या वास्तव में आप के लिए पूछ रहे थे, अन्य तरीकों की कमियों में से कोई भी नहीं

मुझे ऐसा करने का एक और तरीका मिल गया, यहां हरोकोक पोस्ट से देखें

संक्षेप करने के लिए (कुछ कॉपी और पेस्ट के बारे में क्षमा करें)

  • अपने रूट फ़ोल्डर के अंतर्गत एक repo निर्देशिका बनाएं:
 आपका प्रोजेक्ट
 + - pom.xml
 + - src
 + - रेपो
  • अपने स्थानीय रेपो निर्देशिका में जार स्थापित करने के लिए इसे चलाएं
 एमवीएन तैनाती: तैनाती-फाइल-डरल = फाइल: /// पथ / से / yourproject / repo / -file = mylib-1.0.jar -DgroupId = com.example -DartifactId = mylib -Dackacking = jar -Dversion = 1.0
  • इसे अपने pom.xml जोड़ें:
 <repositories> <!--other repositories if any--> <repository> <id>project.local</id> <name>project</name> <url>file:${project.basedir}/repo</url> </repository> </repositories> <dependency> <groupId>com.example</groupId> <artifactId>mylib</artifactId> <version>1.0</version> </dependency> 

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

एक नकली मैवेन प्रोजेक्ट का निर्माण जो एक पूर्व-मौजूदा जार को एक प्राथमिक कलाकृति के रूप में जोड़ता है, पीओएम इंस्टॉल करने में चल रहा है: install-file execution। यहां पीओएम के इस प्रकार के एक उदाहरण का उदाहरण दिया गया है:

  <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.3.1</version> <executions> <execution> <id>image-util-id</id> <phase>install</phase> <goals> <goal>install-file</goal> </goals> <configuration> <file>${basedir}/file-you-want-to-include.jar</file> <groupId>${project.groupId}</groupId> <artifactId>${project.artifactId}</artifactId> <version>${project.version}</version> <packaging>jar</packaging> </configuration> </execution> </executions> </plugin> </plugins> </build> 

लेकिन इसे लागू करने के लिए, मौजूदा परियोजना संरचना को बदलना चाहिए। सबसे पहले, आपको यह ध्यान रखना चाहिए कि ऐसे प्रत्येक प्रकार के जार के लिए अलग-अलग नकली मैवेन प्रोजेक्ट (मॉड्यूल) बनाया जाना चाहिए। और इसमें सभी उप-मॉड्यूल सहित माता-पिता मेवेन परियोजना तैयार की जानी चाहिए: सभी जार रैपर और मौजूदा मुख्य परियोजना संरचना हो सकती है:

जड़ परियोजना (इसमें पेरेंट पीओएम फ़ाइल में मॉड्यूल XML तत्व के साथ सभी उप-मॉड्यूल शामिल हैं) (पोम पैकेजिंग)

जार 1 आवरण मेवेन बाल परियोजना (पोम पैकेजिंग)

जार 2 आवरण मेवेन बाल परियोजना (पोम पैकेजिंग)

मुख्य मौजूदा मेवेन बाल परियोजना (युद्ध, जार, ईआर …. पैकेजिंग)

जब माता-पिता mvn: install या mvn के माध्यम से चल रहा है: पैकेजिंग को मजबूर कर दिया जाता है और उप-मॉड्यूल निष्पादित होंगे। यह यहां एक ऋण के रूप में चिंतित हो सकता है, क्योंकि परियोजना संरचना को बदला जाना चाहिए, लेकिन अंत में एक गैर-स्थिर समाधान प्रदान करता है

systemPath साथ समस्या यह है कि निर्भरता के जार आपके कलाकृतियों के साथ संक्रमित निर्भरता के रूप में वितरित नहीं किए जाएंगे। मैंने जो यहां पोस्ट किया है, उसे आज़माएं: क्या आपकी प्रोजेक्ट जार फाइलों को मर्ज करने या वेब-इनफ / लिब में डाल देना सबसे अच्छा है?

फिर हमेशा की तरह निर्भरता घोषित करें

और कृपया पादलेख नोट पढ़ें।

यदि आप एक त्वरित और गंदे समाधान चाहते हैं, तो आप निम्न कार्य कर सकते हैं (हालांकि मैं परीक्षण परियोजनाओं को छोड़कर कुछ के लिए यह सिफारिश नहीं करता है, मेवेन शिकायत करेंगे कि यह उचित नहीं है)।

आपको प्रत्येक जार फ़ाइल के लिए निर्भरता प्रविष्टि जोड़ें, अधिमानतः एक पर्ल स्क्रिप्ट या कुछ इसी तरह से और कॉपी / पेस्ट करें जो आपकी पोम फ़ाइल में है।

 #! /usr/bin/perl foreach my $n (@ARGV) { $n=~s@.*/@@; print "<dependency> <groupId>local.dummy</groupId> <artifactId>$n</artifactId> <version>0.0.1</version> <scope>system</scope> <systemPath>\${project.basedir}/lib/$n</systemPath> </dependency> "; 

मैंने पाया एक अजीब समाधान:

ग्रहण का उपयोग करना

  • सरल (गैर-मैवेन) जावा प्रोजेक्ट बनाएं
  • एक मुख्य वर्ग जोड़ें
  • क्लासपाथ में सभी जार जोड़ें
  • रननाबल जार निर्यात करें (यह महत्वपूर्ण है, क्योंकि इसे करने के लिए कोई अन्य तरीका नहीं है)
  • जनरेटेड जेआर में आवश्यक लाइब्रेरी निकालें चुनें
  • लाइसेंस के मुद्दों का फैसला
  • तद्मम … जेनरेट किए गए जार को अपने एम 2 रेपो में स्थापित करें
  • अपनी अन्य परियोजनाओं में यह एक निर्भरता जोड़ें

चीयर्स, बालिंट

हालांकि यह आपकी समस्या के लिए बिल्कुल फिट नहीं है, मैं इसे यहाँ छोड़ दूँगा मेरी आवश्यकताएं थीं:

  1. एक ऑनलाइन मेवेन रिपॉजिटरी में पाया नहीं जा सकता जार एसवीएन में होना चाहिए।
  2. यदि कोई डेवलपर एक और पुस्तकालय जोड़ता है, तो अन्य डेवलपर्स को मैन्युअल रूप से इंस्टॉल करने से परेशान नहीं होना चाहिए।
  3. आईडीई (मेरे मामले में नेटबैंस) को स्वसंपूर्ण और सहायता प्रदान करने के लिए स्रोत और जवाडॉक्स खोजने में सक्षम होना चाहिए।

चलो पहले (3) के बारे में बात करते हैं: बस एक फ़ोल्डर में जार होने और उन्हें किसी तरह से अंतिम जार में मिलाकर काम नहीं करेगा, क्योंकि आईडीई इसे समझ नहीं पाएगा। इसका अर्थ है कि सभी पुस्तकालयों को ठीक से स्थापित करना होगा। हालांकि, मुझे "mvn install-file" का उपयोग करके प्रत्येक को इसे स्थापित करना नहीं चाहिए

मेरी परियोजना में मुझे metawidget की आवश्यकता थी ये रहा:

  1. एक नया मेवेन प्रोजेक्ट बनाएं (इसे "साझा-लिब्स" या कुछ ऐसा नाम दें)।
  2. मेटाइजेट डाउनलोड करें और src / main / lib में ज़िप को निकालें।
  3. फ़ोल्डर डॉक / एपीआई में जवाडॉक्स शामिल हैं। सामग्री का एक ज़िप बनाएं (डॉक्टर / एपीआई / एपीआई.जिप)।
  4. इस तरह पोम को संशोधित करें
  5. परियोजना का निर्माण और पुस्तकालय स्थापित किया जाएगा।
  6. लाइब्रेरी को अपनी प्रोजेक्ट की निर्भरता के रूप में जोड़ें, या (यदि आप साझा-लिब्स प्रोजेक्ट में निर्भरता जोड़ते हैं) साझा-libs को सभी पुस्तकालयों को एक बार में प्राप्त करने के लिए निर्भरता के रूप में जोड़ें।

हर बार जब आपके पास एक नई लाइब्रेरी है, तो बस एक नया निष्पादन जोड़ें और सभी को परियोजना को फिर से बनाने के लिए कहें (आप इस परियोजना के हिएरैच के साथ इस प्रक्रिया को बेहतर बना सकते हैं)।

जो मेरे लिए सबसे आसान है, वह सिर्फ अपने कस्टम जार को शामिल करने के लिए आपके मेवेन-कंपाइलर-प्लगइन को कॉन्फ़िगर करता है। यह उदाहरण किसी जार फाइल को एक lib निर्देशिका में लोड करेगा।

  <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <includes> <include>lib/*.jar</include> </includes> </configuration> </plugin> 

एक त्वरित और गंदे बैच समाधान (एलेक्स के उत्तर के आधार पर):

libs.bat

 @ECHO OFF FOR %%I IN (*.jar) DO ( echo ^<dependency^> echo ^<groupId^>local.dummy^</groupId^> echo ^<artifactId^>%%I^</artifactId^> echo ^<version^>0.0.1^</version^> echo ^<scope^>system^</scope^> echo ^<systemPath^>${project.basedir}/lib/%%I^</systemPath^> echo ^</dependency^> ) 

इसे इस तरह से libs.bat > libs.txt : libs.bat > libs.txt । फिर libs.txt खोलें और इसकी सामग्री को निर्भरता के रूप में कॉपी करें।

मेरे मामले में, मुझे केवल अपने कोड को संकलित करने के लिए पुस्तकालयों की आवश्यकता थी, और यह समाधान उस प्रयोजन के लिए सर्वोत्तम था।

तीसरी पार्टी जार को स्थापित करने के लिए जो maven repository में नहीं है maven-install-plugin का उपयोग करें

नीचे दिए गए कदम हैं:

  1. जार फ़ाइल स्रोत से मैन्युअल रूप से डाउनलोड करें (वेबसाइट)
  2. एक फ़ोल्डर बनाएँ और इसमें अपनी जार फाइल डालें
  3. अपने स्थानीय मेवेन रिपॉजिटरी में 3 पार्टी जार स्थापित करने के लिए नीचे दिए गए आदेश को चलाएं

mvn install: install-file -Dfile = -DgroupId = -DartifactId = -Dvision = -Dackacking =

नीचे एक है जैसे मैं इसे simonsite log4j के लिए इस्तेमाल किया

mvn install: install-file -Dfile = / उपयोगकर्ता / athanka / git / MyProject / repo / log4j- रोलिंग- appender.jar-DgroupId = uk.org.simonsite -DartifactId = log4j- रोलिंग-एपेन्डर -विवरण = 20150607-2059 – Dpackaging = जार

  1. Pom.xml में नीचे निर्भरता शामिल है

      <dependency> <groupId>uk.org.simonsite</groupId> <artifactId>log4j-rolling-appender</artifactId> <version>20150607-2059</version> </dependency> 
  2. अपने पैकेजिंग को बनाने के लिए एमवीएन क्लीन इंस्टॉल कमांड चलाएं

नीचे संदर्भ लिंक है:

https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

उन लोगों के लिए जो यहां एक अच्छा जवाब नहीं मिला, यह यही है कि हम इसमें जरूरी निर्भरता के साथ जार पाने के लिए क्या कर रहे हैं। यह उत्तर ( https://stackoverflow.com/a/7623805/1084306 ) मेवेन असेंबली प्लगइन का उपयोग करने के लिए उल्लेख किया गया है लेकिन वास्तव में उत्तर में कोई उदाहरण नहीं देता है। और अगर आप उत्तर के अंत तक सभी तरह से नहीं पढ़ते हैं (यह बहुत लंबा है), तो आप इसे याद कर सकते हैं। नीचे अपने pom.xml को जोड़ना target/${PROJECT_NAME}-${VERSION}-jar-with-dependencies.jar उत्पन्न करेगा

  <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.4.1</version> <configuration> <!-- get all project dependencies --> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <!-- MainClass in mainfest make a executable jar --> <archive> <manifest> <mainClass>my.package.mainclass</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <!-- bind to the packaging phase --> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> 

यह जवाब नहीं देता कि उन्हें अपने पोम में कैसे जोड़ना है, और कोई ब्रेनर नहीं हो सकता है, लेकिन क्या आप अपने वर्कस्पेथ काम में लिपि डाइर जोड़ सकते हैं? मुझे पता है कि मैं क्या करता हूं जब मुझे किसी बाहरी जार की ज़रूरत होती है, जिसे मैं अपने मैवेन रिपॉज में जोड़ना नहीं चाहता।

उम्मीद है की यह मदद करेगा।

आर्किमिडीज़ ट्राजानो ने लिखा है कि हमारे प्रोजेक्ट में क्या काम किया गया है, लेकिन हमारे। एम 2 / सेटिंग्स.xml में ऐसा कुछ था:

  <mirror> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://url_to_our_repository</url> </mirror> 

और * को केंद्रीय में बदला जाना चाहिए इसलिए यदि उसका उत्तर आपके लिए काम नहीं करता है, तो आपको अपनी सेटिंग्स.xml जांचनी चाहिए

मैंने कुछ अजगर कोड को @लेक्स लेहमैन के उत्तर के लिए टिप्पणी में दिए, इसलिए यहां पोस्ट कर रहा हूं।

 def AddJars(jarList): s1 = '' for elem in jarList: s1+= """ <dependency> <groupId>local.dummy</groupId> <artifactId>%s</artifactId> <version>0.0.1</version> <scope>system</scope> <systemPath>${project.basedir}/manual_jars/%s</systemPath> </dependency>\n"""%(elem, elem) return s1 

मैं सिर्फ एक त्वरित और गंदे समाधान चाहता था … मैं निकिता वोल्कोव से स्क्रिप्ट नहीं चला सकता: वाक्यविन्यास त्रुटि + इसके लिए जार नामों के लिए सख्त प्रारूप की आवश्यकता होती है।

मैंने इस पर्ल स्क्रिप्ट को बनाया है जो कि जार फ़ाइल नाम के लिए जो भी प्रारूप के साथ काम करता है, और यह एक एक्सएमएल में निर्भरताएं उत्पन्न करता है, इसलिए इसे सीधे कॉम में चिपकाया जा सकता है।

यदि आप इसका उपयोग करना चाहते हैं, तो सुनिश्चित करें कि आप समझते हैं कि स्क्रिप्ट क्या कर रही है, आपको lib फ़ोल्डर और groupId या groupId लिए मूल्य बदलने की आवश्यकता हो सकती artifactId

 #!/usr/bin/perl use strict; use warnings; open(my $fh, '>', 'dependencies.xml') or die "Could not open file 'dependencies.xml' $!"; foreach my $file (glob("lib/*.jar")) { print "$file\n"; my $groupId = "my.mess"; my $artifactId = ""; my $version = "0.1-SNAPSHOT"; if ($file =~ /\/([^\/]*?)(-([0-9v\._]*))?\.jar$/) { $artifactId = $1; if (defined($3)) { $version = $3; } `mvn install:install-file -Dfile=$file -DgroupId=$groupId -DartifactId=$artifactId -Dversion=$version -Dpackaging=jar`; print $fh "<dependency>\n\t<groupId>$groupId</groupId>\n\t<artifactId>$artifactId</artifactId>\n\t<version>$version</version>\n</dependency>\n"; print " => $groupId:$artifactId:$version\n"; } else { print "##### BEUH...\n"; } } close $fh;