(इस उत्तर एसबीटी 1.1.0+ और एसबीटी-crossproject 0.3.1+ के बारे में जानकारी, जो काफी पूरी बात को आसान बनाने के साथ संपादित किया गया है।)
एसबीटी 1.1.0 के साथ
और बाद में, आप उपयोग कर सकते हैं .withId("core")
। लेकिन एसबीटी-क्रॉसप्रोजेक्ट 0.3.1+ के साथ बेहतर है, नीचे देखें।
मैं एक Project
की आईडी बदलने के बारे में पता नहीं है, लेकिन यहाँ, भी अपने मूल मुद्दे को हल करने के लिए एक पूरी तरह से अलग तरीका है, यानी, है core
/coreJS
coreJVM/coreJS
के बजाय। विचार उन आईडी का उपयोग करने के लिए crossProject
को कस्टमाइज़ करना है, जिन्हें आप शुरू करना चाहते हैं।
सबसे पहले, आपको sbt-crossproject का उपयोग करने की आवश्यकता होगी। यह कई प्लेटफार्मों में संकलन के लिए नया "मानक" है, जो स्कैला मूल निवासी और स्वयं (स्कैला.जेएस से) से @ डेंश द्वारा सह-डिज़ाइन किया गया है। Scala.js 1.x सब कुछ एसबीटी-क्रॉसप्रोजेक्ट का उपयोग करेगा, लेकिन एसबीटी-क्रॉसप्रोजेक्ट का उपयोग Scala.js 0.6.x के साथ भी करना संभव है। इसके लिए, the instructions in the readme का पालन करें। विशेष रूप से, "पीछा" भाग मत भूलना:
// Shadow sbt-scalajs' crossProject and CrossType from Scala.js 0.6.x
import sbtcrossproject.{crossProject, CrossType}
एसबीटी-crossproject से अधिक लचीला है Scala.js 'हार्ड-कोडेड crossProject
। इसका मतलब है कि आप इसे अधिक आसानी से अनुकूलित कर सकते हैं। विशेष रूप से, इसमें Platform
की सामान्य धारणा है, यह परिभाषित करता है कि कोई भी प्लेटफ़ॉर्म कैसे व्यवहार करता है।
एक क्रॉस JVM/जे एस परियोजना के लिए, नई शैली crossProject
मंगलाचरण
lazy val coreBase = crossProject(JVMPlatform, JSPlatform)
.crossType(CrossType.Pure)
.in(file("core"))
.settings(...)
.jvmConfigure(_.copy(id = "core"))
.jsConfigure(_.copy(id = "coreJS"))
lazy val core = coreBase.jvm
lazy val coreJS = coreBase.js
होगा एसबीटी-crossproject 0.3.1 के साथ शुरू, तो आप बस में से एक के लिए मंच प्रत्यय जोड़ने के लिए नहीं यह बता सकते हैं आपके प्लेटफार्मआपके मामले में, आप JVM मंच के लिए प्रत्यय से बचना चाहते हैं, तो आप लिखते थे:
lazy val coreBase = crossProject(JVMPlatform, JSPlatform)
.withoutSuffixFor(JVMPlatform)
.crossType(CrossType.Pure)
...
lazy val core = coreBase.jvm
lazy val coreJS = coreBase.js
और कहा कि तुम सब करने की जरूरत है!
पुराना जवाब है, एसबीटी-crossproject लागू करने के लिए 0.3.0 और इससे पहले कि
JVMPlatform
और JSPlatform
एक एडीटी नहीं हैं; वे एक ओओ शैली में डिजाइन किए गए हैं। इसका मतलब है कि आप अपना खुद का बना सकते हैं। विशेष रूप से, आप बना सकते हैं अपने खुद के JVMPlatformNoSuffix
कि JVMPlatform
के रूप में लेकिन इस परियोजना आईडी के लिए एक प्रत्यय जोड़े बिना भी ऐसा ही होगा:
import sbt._
import sbtcrossproject._
case object JVMPlatformNoSuffix extends Platform {
def identifier: String = "jvm"
def sbtSuffix: String = "" // <-- here is the magical empty string
def enable(project: Project): Project = project
val crossBinary: CrossVersion = CrossVersion.binary
val crossFull: CrossVersion = CrossVersion.full
}
अब जब कि काफी पर्याप्त नहीं अभी तक है, क्योंकि .jvmSettings(...)
और दोस्तों के एक से कार्रवाई के लिए परिभाषित कर रहे हैं JVMPlatform
, जैसे किसी अन्य Platform
पर नहीं। इसलिए कि फिर से परिभाषित करने के साथ-साथ होगा:
implicit def JVMNoSuffixCrossProjectBuilderOps(
builder: CrossProject.Builder): JVMNoSuffixCrossProjectOps =
new JVMNoSuffixCrossProjectOps(builder)
implicit class JVMNoSuffixCrossProjectOps(project: CrossProject) {
def jvm: Project = project.projects(JVMPlatformNoSuffix)
def jvmSettings(ss: Def.SettingsDefinition*): CrossProject =
jvmConfigure(_.settings(ss: _*))
def jvmConfigure(transformer: Project => Project): CrossProject =
project.configurePlatform(JVMPlatformNoSuffix)(transformer)
}
एक बार जब आप अपने निर्माण (एक project/JVMPlatformNoSuffix.scala
में दूर आदेश .sbt
फ़ाइल को प्रदूषित करने के लिए नहीं में छिपा) में यह सब है, तो आप के ऊपर पार परिभाषित कर सकते हैं परियोजना के रूप में:
lazy val coreBase = crossProject(JVMPlatformNoSuffix, JSPlatform)
.crossType(CrossType.Pure)
.in(file("core"))
.settings(...)
lazy val core = coreBase.jvm
lazy val coreJS = coreBase.js
स्पष्ट रूप से प्रोजेक्ट आईडी को पैच करने की आवश्यकता के बिना।
मैंने इस विचार को लागू करने के लिए https://github.com/scala-native/sbt-crossproject/pull/61 बनाया है। मुझे लगता है कि यह पैटर्न सीधे प्लगइन में शामिल करने के लिए पर्याप्त है। –
फिर से धन्यवाद, @ एसजेआरडी! मैं इस जवाब को स्वीकार कर रहा हूं लेकिन अगर किसी के पास 'आईडी' को बदलने का आसान तरीका है तो मुझे इसे देखने में दिलचस्पी होगी। –
आगामी एसबीटी 1.1 बीटीडब्ल्यू में फिक्स्ड: https://github.com/sbt/sbt/pull/3601। –