2011-10-17 16 views
43

मेरे पास एक जार (एक एसबीटी परियोजना नहीं, कोई स्रोत कोड नहीं, सिर्फ जार फ़ाइल) के लिए संकलित लाइब्रेरी है जो एक भंडार पर उपलब्ध नहीं है।स्थानीय भंडार में जार कैसे प्रकाशित करें?

क्या जार को स्थानीय रूप से प्रकाशित करने का कोई तरीका है इसलिए मैं libraryDependencies += "org.xxx" % "xxx" % "1.0" नोटेशन का उपयोग करके निर्भरता जोड़ सकता हूं? (मैं पहले से ही lib फ़ोल्डर में कॉपी करके एक परियोजना के लिए फ़ाइल जोड़ने के बारे में पता है।)

+0

यह एक बहुत ही रोचक सवाल है क्योंकि मैंने लगभग कोई कार्य नहीं देखा है जो किसी परियोजना की अपेक्षा नहीं करेगा (''' को छोड़कर)। कोई एक प्लगइन के बारे में सोच सकता है जिसे आप वैश्विक रूप से पंजीकृत करेंगे और स्थानीय आइवी भंडार में जार प्रकाशित करने के लिए इसका इस्तेमाल करेंगे। मुझे कोई प्लगइन नहीं है जो ऐसा करेगा। –

उत्तर

-2
+0

-1, मेवेन के पास इस सवाल से कोई लेना देना नहीं है, हालांकि आपकी गलती ओपी ने इसे "मैवेन" टैग जोड़ा नहीं है। – cbmanica

+2

हाहा हालांकि आपकी गलती इतनी नहीं है -1। उसके पास एक जार फ़ाइल है जिसे उसे एक भंडार में चाहिए, मैवेन एक भंडार है। –

+0

@cbmanica रॉय यहां सही है। मैं आपके गुमराह डाउनवोट को रद्द करने के लिए उत्साहित हूं। – javadba

2

यहाँ एक ब्लॉग पोस्ट मैं एक करने के लिए एसबीटी विरूपण साक्ष्य पुश करने के लिए पीछा किया है कुछ महीनों पहले मैवेन रिपोजिटरी (स्थानीय और रिमोट)।

http://brizzled.clapper.org/id/100/

+0

धन्यवाद, लेकिन मुझे पहले से ही पता है कि मेरे स्थानीय भंडार में एक एसबीटी परियोजना कैसे प्रकाशित करें। मैं जो पूछ रहा था वह था कि मैं अपने स्थानीय भंडार में एक मौजूदा जार फ़ाइल कैसे जोड़ूं। क्या आप जानते हैं कि यह काम कैसे करना है? –

44

प्रकाशित-स्थानीय कार्रवाई एक स्थानीय आइवी भंडार करने के लिए अपने प्रोजेक्ट प्रकाशित किया जाता है। डिफ़ॉल्ट रूप से, यह स्थानीय भंडार $ {user.home} /। Ivy2/स्थानीय में है। इसके बाद आप उसी परियोजना पर अन्य परियोजनाओं से source

संपादित करें: क्षमा करें, मैंने आपके प्रश्न को गलत तरीके से पढ़ा है। अपने स्थानीय आईवी रेपो में एक जार या स्रोत प्रकाशित करने के लिए यहां एक example है।

+1

सही, लेकिन यह एक परियोजना नहीं है, यह एक जार फ़ाइल है। मैं यह कैसे करु? –

-1

मुझे लगता है कि एक स्थानीय भंडार बनाता है एक नमूना प्ले फ्रेमवर्क/एसबीटी प्रोजेक्ट बनाया (न केवल publish-local) यहाँ: https://github.com/muymoo/local-ivy-repo-sbt विशेष रूप Build.scala

makeLocalRepoSettings(publishedProjects):_*

और

localRepoArtifacts += "org.apache.ws.security" % "wss4j" % "1.6.9"

को देखो ये localRepoArtifacts मेरे स्थानीय आईवी रेपो में पाए जाते हैं, लेकिन मुझे लगता है कि आप वें संपादित कर सकते हैं सादे पुराने जार फ़ाइलों के साथ भी काम करना है।

चलाने के लिए: play local-repository-created

यह जो उनके Build.scala में और भी बहुत कुछ करता है https://github.com/sbt/sbt-remote-control का एक सरल संस्करण है।

18

tl; dr मैं इसे एक चाल नहीं कहूंगा जो एसबीटी की सुविधा नहीं है। आपको चेतावनी दी गई थी।

मान लें कि आपको file.jar प्रकाशित करने के लिए मिला है। जैसा कि के लिए है बिल्ड टूल, एसबीटी सहित, यह उन कार्यों को निष्पादित करना है जो अंततः एक आर्टिफैक्ट बनाते हैं - अधिकांश मामलों में एक जार फ़ाइल - किसी प्रोजेक्ट में फ़ाइलों में से।

प्रोजेक्ट आर्टिफैक्ट के लिए निर्देशांक सेट करता है।

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

आवश्यक सेटिंग्स के साथ एक build.sbt बनाएँ - organization, name, version और संभवतः scalaVersion - और जहां जार फ़ाइल है इसे सहेजें।

organization := "org.abc" 

name := "my-own-publish-jar" 

version := "1.0.0" 

scalaVersion := "2.11.3" 

packageBin in Compile := file(s"${name.value}_${scalaBinaryVersion.value}.jar") 

आप may've देखा, निर्माण में परिवर्तन compile:package कार्य जार फ़ाइल में बात करने के लिए।

यही है।

sbt publishLocal निष्पादित करें और जार फ़ाइल आईवी 2 स्थानीय भंडार में होनी चाहिए, यानी ~/.ivy2/local/org.abc/my-own-publish-jar_2.11/1.0.0/jars/my-own-publish-jar_2.11.jar

प्रोटिप कमांड लाइन पर निर्दिष्ट निर्देशांक के साथ ऐसा करने के लिए प्लगइन लिखना अब काफी आसान होना चाहिए।

+2

यह स्वीकार्य उत्तर क्यों नहीं है? –

+0

यह मेरे लिए काम किया। मुझे अपना विशेष लक्ष्य प्राप्त करने के लिए '_ $ {scalaBinaryVersion.value}' को छोड़ना पड़ा, लेकिन अन्यथा यह समाधान था। – reverend

+0

हां, जावा जार के लिए जहां आप स्कैला संस्करण नहीं चाहते हैं, आप इसे हटाने के लिए 'क्रॉसपाथ: = झूठा' सेट कर सकते हैं - लेकिन इसका उपयोग केवल स्थानीय बिल्डों के लिए किया जाना चाहिए जब स्कैला बाइनरी संगतता कोई समस्या नहीं है। –

3

मान लीजिए कि आप wetElephant.jar और wetElephant-javadoc.jar करते हैं कुछ 3 पार्टी पुस्तकालय और इसी javadocs जो आप अपने स्थानीय रेपो को प्रकाशित करने और libraryDependencies एसबीटी taskKey का उपयोग कर एक अन्य परियोजना से यह संदर्भ के लिए चाहते हैं फ़ाइलें।

यहां आपको क्या करना है।

  1. modules\wetElephant
  2. में अपने पुस्तकालयों (wetElephant.jar और wetElephant-javadoc.jar) रखो अपने build.sbt फ़ाइल में परियोजना को परिभाषित करें (या Build.scala फ़ाइल)

    lazy val stolenLib = project 
        .in(file("modules/wetElephant")) 
        .settings(
        organization    := "com.stolenLibs", 
        name      := "wetElephant", 
        version     := "0.1-IDonKnow", 
        crossPaths    := false, //don't add scala version to this artifacts in repo 
        publishMavenStyle   := true, 
        autoScalaLibrary   := false, //don't attach scala libs as dependencies 
        description    := "project for publishing dependency to maven repo, use 'sbt publishLocal' to install it", 
        packageBin in Compile  := baseDirectory.value/s"${name.value}.jar", 
        packageDoc in Compile  := baseDirectory.value/s"${name.value}-javadoc.jar" 
    ) 
    
  3. कॉल publishLocal कार्य एसबीटी/एक्टिवेटर से (मैंने इसे एक्टिवेटर से किया और इसे प्रोजेक्ट नाम से प्रीफ़िक्स किया):

    ./activator wetElephant/publishLocal     
    

... और देखने के लिए क्या और कहाँ प्रकाशित किया गया था उत्पादन पढ़ें:

/cygdrive/d/devstation-workspace/projects/m4l-patches 1 
     [info] Loading project definition from D:\devstation-workspace\projects\m4l-patches\project 
     [info] Set current project to m4l-patches (in build file:/D:/devstation-workspace/projects/m4l-patches/) 
     [info] Updating {file:/D:/devstation-workspace/projects/m4l-patches/}wetElephant... 
    [info] Packaging D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\wetelephant-0.1-IDonKnow-sources.jar ... 
    [info] Done packaging. 
    [info] Wrote D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\wetelephant-0.1-IDonKnow.pom 
     [info] Resolving org.fusesource.jansi#jansi;1.4 ...4 .... 
    [info] Done updating. 
    [info] :: delivering :: com.stolenLibs#wetelephant;0.1-IDonKnow :: 0.1-IDonKnow :: release :: Sun Dec 20 20:09:24 CET 2015 
     [info] delivering ivy file to D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\ivy-0.1-IDonKnow.xml 
     [info] published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\poms\wetelephant.pom 
     [info] published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\jars\wetelephant.jar 
     [info] published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\srcs\wetelephant-sources.jar 
     [info] published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\docs\wetelephant-javadoc.jar 
     [info] published ivy to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\ivys\ivy.xml 
     [success] Total time: 1 s, completed 2015-12-20 20:09:24 
  1. वैकल्पिक रूप से इन पुस्तकालयों एक अन्य परियोजना में उपयोग

    libraryDependencies += "com.stolenLibs" % "wetElephant" % "0.1-IDontKnow" 
    

अस्वीकरण: मैं कैसे नहीं स्रोतों प्रकाशित करने के लिए नहीं पता ...

+0

यह काम नहीं करता है। स्कैला संस्करण हमेशा 2.10 है और संस्करण हमेशा 0.1.snapshot है। –

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