[英]How to use object/type from one subproject in another in multi-project build in SBT?
我有以下多項目文件夾結構:
/ComponentA/ComponentA.scala
/ComponentA/build.sbt
/ComponentB/ComponentB.scala
/ComponentB/build.sbt
/project/Build.scala
main.scala
在根對象main.scala
,應該發生以下情況: ComponentA
返回ComponentB
讀入並打印出來的String消息。
以下是文件的內容:
ComponentA
object ComponentA {
def main(args: Array[String]) {
var myMessage : String = "this message should be passed to ComponentB";
println("Message to forward: %s \n\n\n ".format(myMessage))
return myMessage;
}
}
以componentB
object ComponentB {
def main(args: Array[String]) {
println("\n\n\n Inside ComponentB! \n\n\n ")
println("Message received: %s \n\n\n ".format(args(0)))
}
}
Build.scala
import sbt._
import Keys._
object RootBuild extends Build {
lazy val root = Project(id = "root", base = file("."))
.dependsOn(ComponentA, ComponentB)
lazy val ComponentA = Project(id = "ComponentA", base = file("ComponentA"))
lazy val ComponentB = Project(id = "ComponentB", base = file("ComponentB"))
.dependsOn(ComponentA)
}
main.scala
object ComponentB {
def main(args: Array[String]) {
println("\n\n\n Inside main! \n\n\n ")
// THIS SHOULD HAPPEN:
// ComponentB(ComponentA());
}
}
這可能與項目結構有關嗎? 如果是這樣,代碼將如何用於main.scala
?
根項目中的以下build.sbt
應該允許您創建該項目結構。
lazy val ComponentA = project
lazy val ComponentB = project dependsOn ComponentA
lazy val root = project in file(".") dependsOn (ComponentA, ComponentB) aggregate (ComponentA, ComponentB)
您必須在組件對象中修復一些問題,以便進行編譯,但項目的類路徑應該沒問題。
然而,它是一種常見的方法有根項目子模塊的集合所以你的情況root
不應該有dependsOn
與另外一個項目ComponentAB
那會dependsOn ComponentB
(因此ComponentA
作為ComponentB
已經依賴於它)。
下面的代碼應該非常謹慎,只是為了問題。
ComponentA / ComponentA.scala
object ComponentA {
def apply(): String = {
var myMessage = "this message should be passed to ComponentB"
println(s"Message to forward: $myMessage\n\n\n")
myMessage
}
}
以componentB / ComponentB.scala
object ComponentB {
def apply(msg: String) = {
println("\n\n\n Inside ComponentB! \n\n\n ")
println("Message received: $msg\n\n\n")
}
}
Main.scala
object MainObject {
def main(args: Array[String]) {
println("\n\n\n Inside main! \n\n\n ")
//ComponentB(ComponentA())
ComponentA()
}
}
使用這些文件,當您run
您應該獲得以下輸出:
[root]> run
[info] Running ComponentB
Inside main!
Message to forward: this message should be passed to ComponentB
[success] Total time: 0 s, completed Jan 20, 2014 9:59:32 PM
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.