2014-10-10 6 views
6

मैं एक एसबीटी प्लगइन को एक भंडार में प्रकाशित करने की कोशिश कर रहा हूं। मुझे यकीन है कि नहीं करता है, तो यह किसी भी प्रासंगिकता है, लेकिन हमारे प्लगइन लोड करता है sbt-twirl प्लगइन हूँ - चारों ओर Googling, यह publishConfiguration की तरह लगता है ओवरराइड किया जा सकता है:प्रकाशन प्लगइन प्रोजेक्ट क्यों प्रकाशित करता है RuntimeException: प्रकाशन के लिए रिपोजिटरी निर्दिष्ट नहीं है?

new PublishConfiguration(None, "dotM2", arts, Seq(), level) 

जब मैं प्रकाशित कार्य चलाने के लिए, कलाकृतियों रेपो के लिए तैनात किया गया है , लेकिन एसबीटी कार्य तो विफल रहता है:

sbt (my-sbt-plugin)> publish 
[info] Loading global plugins from ... 
... 
[info] Done packaging. 
[info] published sbt-my-sbt-plugin to http://my.repo.com/.../sbt-my-sbt-plugin-0.1-SNAPSHOT.jar 
java.lang.RuntimeException: Repository for publishing is not specified. 
    .... stack trace here .... 
[error] (my-sbt-plugin/*:publishConfiguration) Repository for publishing is not specified. 

क्या त्रुटि पैदा हुआ है, और मैं नाकाम रहने से प्रकाशन को रोकने के लिए क्या कर सकता है?

** अद्यतन ** यहाँ inspect publish

sbt (my-sbt-plugin)> inspect publish                             
[info] Task: Unit                                    
[info] Description:                                   
[info] Publishes artifacts to a repository.                             
[info] Provided by:                                   
[info] {file:/path/to/my-sbt-plugin/}my-sbt-plugin/*:publish                  
[info] Defined at:                                   
[info] (sbt.Classpaths) Defaults.scala:988                             
[info] Dependencies:                                   
[info] my-sbt-plugin/*:ivyModule                              
[info] my-sbt-plugin/*:publishConfiguration                           
[info] my-sbt-plugin/*:publish::streams                            
[info] Delegates:                                    
[info] my-sbt-plugin/*:publish                               
[info] {.}/*:publish                                   
[info] */*:publish                                   
[info] Related:                                    
[info] plugin/*:publish 

है यहाँ कैसे मैं प्रकाशन (प्लगइन सेटिंग्स में से कुछ को छोड़कर libraryDependencies और 1 या 2 के साथ अन्य सेटिंग्स) कॉन्फ़िगर किया है

lazy val plugin = project 
    .settings(publishSbtPlugin: _*) 
    .settings(
    name := "my-sbt-plugin", 
    sbtPlugin := true, 
    addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.0.2") 
) 

def publishSbtPlugin = Seq(
    publishMavenStyle := true, 
    publishTo := { 
    val myrepo = "http://myrepo.tld/" 
    if (isSnapshot.value) Some("The Realm" at myrepo + "snapshots") 
    else Some("The Realm" at myrepo + "releases") 
    }, 
    credentials += Credentials(Path.userHome/".ivy2"/".credentials") 
) 

उत्तर

3

tl; dr प्रोजेक्ट को परिभाषित करने के लिए lazy val plugin = project का उपयोग न करें (अज्ञात अभी तक कारणों से)

कुछ टिप्पणियों के बाद यह पता चला कि समस्या यह थी कि प्रोजेक्ट का नाम plugin जैसा कि lazy val plugin = project का उपयोग करके परिभाषित किया गया है। ऐसा लगता है कि नाम है किसी भी तरह आरक्षित। प्रोजेक्ट का नाम plugin से किसी अन्य नाम पर बदलें और शुरू करें।

1

आप तो इस प्रकार का उपयोग publishLocal (नहीं publish) आपके स्थानीय पर इस कोशिश कर रहा है, तो:

sbt clean compile publish-local 
2

एक परियोजना के अलावा अन्य नाम निर्दिष्ट करना "प्लगइन" इस मुद्दे को हल। मैंने परियोजनाओं में से एक में अनावश्यक build.sbt को हटाकर बिल्ड परिभाषा को थोड़ा सा सरल बना दिया है और प्रोजेक्ट निर्देशिका में पूर्ण निर्माण परिभाषा का उपयोग कर रहा हूं। मल्टी-प्रोजेक्ट बिल्ड को होस्ट करने वाली रूट प्रोजेक्ट को भी प्रकाशन के लिए पुन: कॉन्फ़िगर किया गया है:

lazy val root = 
    Project("sbt-my-plugin-root", file(".")) 
    .settings(noPublishing: _*) 
    .aggregate(sbtMyPluginModule) 

lazy val sbtMyPluginModule = 
    Project("sbt-my-plugin-module", file("sbt-my-plugin-module")) 
    .settings(publishSbtPlugin: _*) 
    .settings(
     name := "sbt-my-plugin-module", 
     organization := "com.my.org", 
     sbtPlugin := true 
    ) 

lazy val noPublishing = seq(
    publish :=(), 
    publishLocal :=() 
) 

lazy val publishSbtPlugin = Seq(
    publishMavenStyle := true, 
    publishArtifact in Test := false, 
    publishTo := { 
    val myrepo = "http://myrepo.tld/" 
    if (isSnapshot.value) Some("The Realm" at myrepo + "snapshots") 
    else Some("The Realm" at myrepo + "releases") 
    }, 
    credentials += Credentials(Path.userHome/".ivy2"/".credentials") 
) 
संबंधित मुद्दे