在SBT的多项目构建中,如何在另一个子项目中使用对象/类型?

道曼

我具有以下多项目文件夹结构:

/ComponentA/ComponentA.scala
/ComponentA/build.sbt
/ComponentB/ComponentB.scala
/ComponentB/build.sbt
/project/Build.scala
main.scala

在根对象中main.scala,将发生以下情况:ComponentA返回ComponentB读入并打印出的String消息

以下是文件的内容:

化合物

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;
  }
}

组分B

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)

}

主标量

object ComponentB {
  def main(args: Array[String]) {

    println("\n\n\n Inside main! \n\n\n ")

    // THIS SHOULD HAPPEN:
    // ComponentB(ComponentA());

  }
}

该项目结构有可能吗?如果是这样,代码将如何使用main.scala

杰西克·拉斯考斯基(Jacek Laskowski)

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")
  }
}

斯卡拉

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在sbt多项目构建中获取子项目路径

如何在另一个子项目的 gradle 任务中从一个子项目调用代码?

如何进行多项目构建,为每个子项目输出一个jar?

Gradle将多模块项目中的嵌套子项目添加为另一个子项目的依赖项

在另一个m子项目中调用一个m子项目的流程

将gradle子项目与另一个子项目作为依赖项进行编译

如何在具有多个子项目的SBT项目中覆盖子项目中的设置

如何在java中的另一个项目中使用一个项目中的类?

如何通过在多项目构建中将其用作依赖项来访问 sbt 插件的子项目?

自动关闭另一个Redmine子项目中的问题

如何在另一个Maven项目中使用一个Maven项目的属性

如何在IntelliJ IDEA中使用另一个项目中的类?

如何在另一个项目中使用 crate 使其不再编译?

如何在另一个php项目中使用laravel路由系统?

如何在多项目构建中排除其他子项目的传递依赖关系?

从另一个子项目复制Gradle依赖项而不会弃用警告

sbt auto-plugins-禁用它们,但禁用一个子项目

如何在Rust货运项目中使用另一个模块中的一个模块?

如何在另一个项目中使用一个site.master?

如何在Visual Studio中使用一个项目中的文件在另一个项目中创建库?

如何在一个项目中设置VBA全局变量并在另一个项目中使用?

如何在使用它的项目的多项目构建中开发sbt插件?

Jenkins-如何从另一个项目的成功构建中列出构建选择

将CMake子项目与另一个项目集成

在另一个项目的xhtml中使用一个项目中的bean

在另一个项目中使用项目中的工具 (c#)

如何在Vue js项目中使用'a'标签重定向到另一个域上的页面?

是否每个子项目都可以使用带有version.sbt的多项目SBT

AsyncDisplayKitcalculateLayoutThatFits()函数可在一个项目中使用,而不在另一个项目中使用