2014-04-14 7 views
11

मुझे अपनी उप-परियोजनाओं में से एक के लिए निर्भरता समेत एक एकल जार बनाने की आवश्यकता है ताकि इसे javaagent के रूप में उपयोग किया जा सके।मैं एसबीटी और एसबीटी रिलीज का उपयोग कर एक वसा जेएआर (निर्भरता के साथ जेएआर) कैसे प्रकाशित करूं?

मेरे पास एक बहु-मॉड्यूल एसबीटी परियोजना है और यह विशेष मॉड्यूल निम्नतम स्तर वाला है (यह भी शुद्ध जावा है)।

कर सकते हैं मैं (जैसे sbt-onejar, sbt-proguard या sbt assembly के साथ) ओवरराइड कैसे निम्नतम स्तर मॉड्यूल पैक किया जाता है?

ऐसा लगता है कि इन उपकरणों को वास्तव में एक पोस्ट-प्रकाशित चरण होने के लिए डिज़ाइन किया गया है, लेकिन मुझे वास्तव में निर्भरता (लेकिन केवल एक मॉड्यूल के लिए) में एक (प्रतिस्थापन या अतिरिक्त) प्रकाशित आर्टेफैक्ट की आवश्यकता है।

अद्यतन:Publishing एसबीटी-असेंबली के लिए एक ही परियोजना के लिए निर्देश हैं, और आसानी से बहु-परियोजना में अनुवाद नहीं करते हैं।

उत्तर

14

एसबीटी-असेंबली के लिए प्रकाशन एक परियोजना के लिए निर्देश हैं, और आसानी से बहु-परियोजना में अनुवाद नहीं करते हैं।

लोग वसा जार प्रकाशित करने की है मुद्दों के बिना & एसबीटी रिलीज का उपयोग कर एसबीटी-विधानसभा। 2011 से एक ब्लॉग आलेख यहां दिया गया है: Publishing fat jar created by sbt-assembly। यह आपके build.sbt पर addArtifact(Artifact(projectName, "assembly"), sbtassembly.AssemblyKeys.assembly) जोड़ने के लिए उबलता है (ध्यान दें कि ब्लॉग AssemblyKeys से थोड़ा पुराना है अब sbtassembly का सदस्य है)।

एसबीटी 0.13 के लिए और इसके बाद के संस्करण, मैं भी बहु परियोजनाओं के लिए build.sbt उपयोग करना पसंद करते हैं, इसलिए मुझे यह पसंद है लिखना चाहते हैं:

import AssemblyKeys._ 

lazy val commonSettings = Seq(
    version := "0.1-SNAPSHOT", 
    organization := "com.example", 
    scalaVersion := "2.10.1" 
) 

val app = (project in file("app")). 
    settings(commonSettings: _*). 
    settings(assemblySettings: _*). 
    settings(
    artifact in (Compile, assembly) ~= { art => 
     art.copy(`classifier` = Some("assembly")) 
    } 
). 
    settings(addArtifact(artifact in (Compile, assembly), assembly).settings: _*) 

Defining custom artifacts देखें:

addArtifact का एक अनुक्रम रिटर्न सेटिंग्स (एक सेटिंग परिभाषा में लपेटा)। एक पूर्ण निर्माण विन्यास में उपयोग की तरह दिखता है:

... 
lazy val proj = Project(...) 
    .settings(addArtifact(...).settings : _*) 
... 
+0

धन्यवाद, लेकिन मैं एक संकलन त्रुटि मिलती है, तो मुझे लगता है कि में 'build.scala' – fommil

+1

" एक संकलन त्रुटि "करते हैं - त्रुटि क्या संकलन? यदि हम न तो आपका कोड देख सकते हैं और न ही त्रुटि संदेश –

+1

धन्यवाद यूजीन, आपके संपादनों ने इसे ठीक किया है (नोट: हमने इस पर कहीं और चर्चा की और यह दस्तावेज़ों में एक टाइपो बन गया)। – fommil

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