लेनिंगन - स्थानीय जार के लिए निर्भरता कैसे जोड़ें?


117

मैं अपनी क्लोजर परियोजना के निर्माण और विकास के लिए लेनिंगन का उपयोग करना चाहता हूं। वहाँ एक रास्ता है project.clj को संशोधित करने के लिए इसे बताने के लिए स्थानीय निर्देशिका से कुछ जार लेने के लिए?

मेरे पास कुछ मालिकाना जार हैं जिन्हें सार्वजनिक रेपो में अपलोड नहीं किया जा सकता है।

इसके अलावा, क्लोजर परियोजनाओं के लिए "लिबिन" निर्देशिका को बनाए रखने के लिए लेनिंगेन का उपयोग किया जा सकता है? यदि मेरी क्लोजर परियोजनाओं का एक समूह एक ही जार को साझा करता है, तो मैं उनमें से प्रत्येक के लिए एक अलग प्रतिलिपि नहीं बनाए रखना चाहता हूं।

धन्यवाद


1
सबको धन्यवाद। जैसा कि मेरे सभी लोगों ने बताया, यह एक कांटेदार मुद्दा है जिसका कोई स्पष्ट उत्तर अभी तक उपलब्ध नहीं है।
सिग्नलसेकर

जवाबों:


38

आप अपने निजी जार को अंदर रख सकते हैं lib/और वे वर्गपाठ के उद्देश्यों lein swankऔर पसंद के लिए होंगे; यह एक निर्भरता प्रबंधन उपकरण का उपयोग करने के बिंदु को हराने के लिए प्रतीत होता है, हालांकि यदि आप वास्तव में उन निर्भरताओं को प्रबंधित नहीं करना चाहते हैं, तो आप लेनिंगन को "खुले स्रोत पर निर्भरता प्रबंधन उपकरण" के रूप में मान सकते हैं और शायद इसके साथ सावधान रहें lein clean

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


(एचआर ने लिनिंगन-विशिष्ट भाग कट-ऑफ पॉइंट को इंगित किया ... क्लोजर भूमि में सामान्य बिल्ड / निर्भरता प्रबंधन टूलिंग कहानी के बारे में जानकारी के लिए नीचे जारी रखें, जिसमें कुछ लिंक शामिल हैं जो मुझे लगता है कि आपकी स्थिति में बहुत काम आ सकता है।)

इसके अलावा, अभी तक, इस सवाल पर कोई सार्वभौमिक समझौता नहीं हुआ है कि क्लोजर के लिए सबसे अच्छा उपकरण कौन सा है, और लिन्गेनेन, जबकि माइंडशेयर में, लगातार क्षेत्रों की विशेषताओं और पॉलिश में भी लाभ प्राप्त कर रहा है - विशेष रूप से, अर्थात यह अभी तक पूरा नहीं हुआ है। यहाँ प्रैग्मेटिक बुकशेल्फ़ के "प्रोग्रामिंग क्लॉजुर" के लेखक स्टुअर्ट हल्लोवे का एक उद्धरण है: "माय 2 सी: लेनिंगन एक महत्वपूर्ण कदम है, लेकिन अभी भी बहुत कुछ करना बाकी है।" पूर्ण पोस्टिंग और एक बहुत ही दिलचस्प चर्चा के लिए फिर से: टूल्स का निर्माण करें और क्लोजर स्पेस की तरह, लेनिंगन, क्लोजर और लाइब्रेरी देखें: मुझे क्या याद आ रहा है?Clojure Google समूह पर थ्रेड। कई प्रतिभागियों ने विशेष रूप से स्थानीय निर्भरता रखने की आवश्यकता का उल्लेख किया है जो किसी भी रिपॉजिटरी में शामिल नहीं हैं, स्थानीय या अन्यथा, और ऐसे परिदृश्यों के साथ आए समाधानों पर विस्तार से बताते हैं। शायद आप देख सकते हैं कि वहाँ पर कुछ भी है जो आपकी समस्या को हल कर सकता है / भविष्य में इसे हल कर सकता है, जब सुविधा परिपक्व हो जाती है?

वैसे भी, यह संभव है कि लेनिंजेन वास्तव में कुछ जटिल परिदृश्यों के लिए एक अच्छी कहानी तैयार न हो। यदि आपको लगता है कि यह आपके मामले के बारे में सच हो सकता है (और मेरा मतलब है कि आप निजी रेपो विचार पर विचार करने के बाद), तो यहां ऊपर बताए गए धागे से लिए गए मावेन-आधारित विकल्पों के कुछ लिंक दिए गए हैं: पॉलीग्लॉट मावेन , क्लोजर-मलेन-प्लगइन ; इस ब्लॉग पोस्टिंगक्लोजर के साथ मावेन का उपयोग करने की कोशिश कर रहे लोगों के लिए उपयोगी होने का लक्ष्य है। जैसा कि मुझे याद है, Meikel Brandmeyer (kotarak के अपने ऑनलाइन हैंडल के तहत SO पर भी) Clojures नामक क्लोजर को समायोजित करने के लिए एक प्लगइन के साथ Gradle (एक ग्रूवी बिल्ड सिस्टम) का उपयोग करता है; मैंने खुद इसे कभी नहीं आजमाया, जैसा कि ग्रूवी के बारे में पहली बात नहीं पता है, लेकिन वह इसके साथ एक बहुत अच्छा भवन अधिनियम चलाने का दावा करता है और मुझे विश्वास है कि इसे मावेन के साथ कुछ भी नहीं करना है - कुछ जो कि प्लस में और खुद के लिए है हम में से कुछ के लिए। :-)


2
पुन: "इस सवाल पर कोई सार्वभौमिक समझौता नहीं है कि क्लोजर के लिए सबसे अच्छा उपकरण कौन सा है" ... आज के रूप में, ऐसा लगता है कि लेनिंगन अब रन-वे मानक है। 2013 के सर्वेक्षण के परिणाम: lein-survey-2013.herokuapp.com/results
डेविड जे।

8
लेनिंगन वी 2 के रूप में, लिब / डायरेक्टरी कार्यक्षमता को हटा दिया गया है। देखें: github.com/technomancy/leiningen/wiki/…
Jared314

आज तक, लेनिंगन शायद अभी भी सबसे लोकप्रिय है, लेकिन बूट भी लोकप्रिय है।
मंगल

64

बस का उपयोग करें : अपनी Project.clj फ़ाइल में संसाधन-पथ । मैं इसे साइबेल सर्वर से कनेक्ट करने के लिए उपयोग करता हूं। बस मेरी परियोजना निर्देशिका में एक संसाधन निर्देशिका बनाई और वहाँ जार फ़ाइलों की प्रतिलिपि बनाई। लेकिन निश्चित रूप से आप एक अधिक सामान्य निर्देशिका का उपयोग कर सकते हैं:

(defproject test-project "0.1.0-SNAPSHOT"
:description "Blah blah blah"
...
:resource-paths ["resources/Siebel.jar" "resources/SiebelJI_enu.jar"])

फिर लेइन रिप्लाई से मैं साइबेल डेटा बीन इंस्टेंस बना सकता हूं, जैसे

(def sbl (com.siebel.data.SiebelDataBean.))
(.login sbl "siebelServer" "user" "password")
...

यदि आपके पास एक नया जावा संस्करण है, तो आप अपने मार्ग विनिर्देश में वाइल्डकार्ड का उपयोग कर सकते हैं जैसे कि अधिक सामान्य निर्देशिका के लिए:

:resource-paths ["/tmp/SiebelJars/*"]

लेइन 2 ग्लोबबिंग का समर्थन नहीं करता है, लेकिन अगर आपको जरूरत है तो github.com/dchelimsky/lein-expand-resource-paths प्लगइन उपलब्ध है।
विचारोत्तेजक

2
यह अब तक का सबसे अच्छा जवाब है। स्थानीय mvan स्थापित अब मेरे लिए काम नहीं करता है।
डेविड विलियम्स

7
यह uberjar के साथ काम नहीं करता है, क्योंकि uberjar निर्भरता जार को जार में जोड़ देगा, बजाय निर्भरता वर्ग फ़ाइलों को जोड़ने के।
टोबियास डोमन

50
  1. परियोजना में एक निर्देशिका बनाएँ:

    mkdir maven_repository

  2. इस भंडार में स्थानीय जार जोड़ें:

    उदाहरण के लिए, यह कमांड jaad-0.8.3.jarफाइल को मावेन रिपॉजिटरी में जोड़ता है:

    mvn deploy:deploy-file -Dfile=jaad-0.8.3.jar -DartifactId=jaad -Dversion=0.8.3 -DgroupId=jaad -Dpackaging=jar -Durl=file:maven_repository

  3. करने के लिए निम्नलिखित जोड़ें project.clj

    :repositories {"local" "file:maven_repository"}

  4. अब एक नियमित lein depsकाम करना चाहिए:

    $ lein deps Downloading: jaad/jaad/0.8.3/jaad-0.8.3.pom from local Transferring 0K from local [WARNING] *** CHECKSUM FAILED - Error retrieving checksum file for jaad/jaad/0.8.3/jaad-0.8.3.pom - IGNORING

चेतावनी को अनदेखा किया जा सकता है, क्योंकि जार परियोजना में जाँच की जाएगी और इंटरनेट से डाउनलोड नहीं की जाएगी।

मूल स्रोत: LAR के साथ स्थानीय JAR का उपयोग करना (कॉपी करने के बाद से बदला हुआ)


इस लिंक पर अच्छा कदम है। यह मेरे लिए बहुत मददगार था।
गोगर

2
नए संस्करणों के साथ आप mvan परिनियोजित: इंस्टॉलेशन के बजाय परिनियोजन-फ़ाइल और निर्दिष्ट करने के लिए -Durl = फ़ाइल का उपयोग करना चाहते हैं: -DlocalRepositoryPath = रेपो के बजाय रेपो। परियोजनाओं में .clj तब आप उपयोग कर सकते हैं: रिपॉजिटरी {"स्थानीय" "फ़ाइल: maven_repository"} देखें: gist.github.com/stuartsierra/3062743 (मैंने प्रश्न संपादित किया, लेकिन अभी भी इसे अनुमोदित करने की आवश्यकता है)
टोबियास डोमन

33

मैं lein pom; lein jar; lein installपुस्तकालयों को विकसित करते समय अच्छी तरह से काम करता हूं ।

पुस्तकालय में विकसित किया जा रहा है और अपने आवेदन की आवश्यकता होती है यह किसी भी :repositoriesआवश्यकता के बिना इसका उपयोग करेगा ।


वैकल्पिक रूप से, lein do pom, jar, installथोड़ा अधिक संक्षिप्त है।


यह लाइब्रेरी को किसी अन्य की तरह कॉल करने की अनुमति देता है :dependencies [[project-name "version"]]


3
अन्य समाधानों की तुलना में यह बहुत सरल है और यह काम करता है! मावेन को स्थापित करने की आवश्यकता नहीं है। धन्यवाद।
dkinzer

आप परिणामी जार को एक लेइन प्रोजेक्ट फ़ाइल में कैसे संदर्भित करते हैं?
INTERSTAR

किसी भी अन्य की तरह:dependencies [[project-name "version"]]
roboli

1
यह विंडोज पर भी बढ़िया काम करता है। मावेन स्थापित करने की आवश्यकता नहीं है जैसा कि पहले ही उल्लेख किया गया है। मैंने इसे विंडोज पर IntelliJ + Cursive के साथ आज़माया है और यह पूरी तरह से काम करता है। विंडोज कमांड लाइन पर "लेइन पोम; लेइन जार; लेइन इंस्टॉल" किया।
एंडबेगिन

4
आपको केवल करने की आवश्यकता है lein install। यह आपके लिए जार और पोम का निर्माण करेगा।
कभी नहीं 0

15

मेरा मानना ​​है कि "सही" दृष्टिकोण एक निजी मावेन रिपॉजिटरी बनाना है ताकि आप जार को एक ही स्थान पर स्टोर कर सकें और आपकी सभी शाखाएं आदि बदलाव उठा सकें। यह आपके काम करने के लिए ओवरकिल हो सकता है। मैं उत्सुक हूँ अगर ये एक आसान तरीका है।


5
धन्यवाद, मैं इस पर गौर करूंगा। हालांकि मुझे कहना होगा कि मेरे दिल में डर है। यदि आप ऐसा करने के लिए कोई सरल चरण-दर-चरण उदाहरण जानते हैं, तो कृपया मुझे इंगित करें। जावा दुनिया में इतने जटिल क्यों हैं?
सिग्नलसेकर


4

हाल ही में एक विकास s3-wagon-privateLeiningen के लिए फिल का प्लगइन है: https://github.com/technomancy/s3-wagon-p

इससे आपको कलाकृतियों को एक निजी रिमोट रेपो में प्रकाशित करने की अनुमति मिल सकती है।


3

इनमें से किसी भी समाधान ने मुझे काम नहीं दिया। इसके बजाय मैंने एक स्थानीय भंडार स्थापित किया है, और स्थानीय रेपो में जार फ़ाइल को स्थापित करने के लिए मावेन का उपयोग किया है, और स्थानीय रेपो को अपनी परियोजना में जोड़ा है।

कमांड लाइन में:

mvn deploy:deploy-file -DgroupId=local -DartifactId=bar \
    -Dversion=1.0.0 -Dpackaging=jar -Dfile=bar.jar \
    -Durl=file:repo

और मैं इस तरह से अपनी परियोजना लिखता हूं।

(defproject foo "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [local/bar "1.0.0"]]
  :repositories {"project" "file:repo"})

आशा करता हूँ की ये काम करेगा।

[संदर्भ: https://gist.github.com/stuartsierra/3062743 ]


2

शायद इस पिछले जवाब पर एक नज़र है , मैं परियोजना के लिए एक रिपॉजिटरी स्थानीय (सेटअप के माध्यम से file://) को सेटअप करने के लिए कदम से कदम निर्देश प्रदान करता हूं जिसमें आप अपने जार स्थापित कर सकते थे।



0

सबसे अच्छा विकल्प एक निजी JFrog / Nexus आर्टिफ़ैक्ट्री सेटअप करना है और अपने स्नैपशॉट / रिलीज़ को वहां तैनात करना है और फिर उस आर्टिफिशियरी को रिपोजिटरी के रूप में आप प्रोजेक्ट में शामिल करें ।clj

अन्य सरल तरीके हैं

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

एससीपी यदि आपके पास पहले से ही अपने एसएसएच सार्वजनिक कुंजी के साथ एक सर्वर सेट है, तो एसटीपी परिवहन निजी निर्भरताओं को प्रकाशित और उपभोग करने का एक सरल तरीका है। निम्नलिखित को डिफप्रोजेक्ट के अंदर रखें:

:plugins [[org.apache.maven.wagon/wagon-ssh-external "2.6"]]
:repositories [["releases" "scp://somerepo.com/home/repo/"]]

फिर डिफप्रोजेक्ट के बाहर निम्नलिखित रखें:

(cemerick.pomegranate.aether/register-wagon-factory!
 "scp" #(let [c (resolve 'org.apache.maven.wagon.providers.ssh.external.ScpExternalWagon)]
          (clojure.lang.Reflector/invokeConstructor c (into-array []))))

यह भी संभव है कि यदि आप nginx या HTTP पर रिपॉजिटरी डायरेक्टरी की सेवा करने के लिए कुछ इसी तरह का सेट अप करते हैं तो यह HTTP ट्रांसपोर्ट का उपयोग करके रिपॉजिटरी में तैनात हो सकता है और http से इसका उपभोग करता है।

एनबी एससीपी को क्लोजर में तैनात किया गया है

मूल स्रोत यहां है https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOO.md

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.