无法从多项目

时间:2017-07-13 21:14:53

标签: sbt

我在sbt中有一个commons项目需要存储在Dependencies.scala中的一些值。

.
├── build.sbt
├── project
│   └── Dependencies.scala
└── src
    └── main
        └── scala

公地/ build.sbt

import Dependencies._

lazy val commons = (project in file("."))
  .settings(
    name := s"$msg commonsproject",
    version := "1.0",
    scalaVersion := "2.12.2"
  )

公地/项目/ Dependencies.scala

object Dependencies {
  val msg = "Hello world"
}

当我运行sbt时,我得到了name

的正确值
[info] Loading project definition from /mydata/workspace/multiproject/commons/project
[info] Set current project to Hello world commonsproject (in build file:/mydata/workspace/multiproject/commons/)
> name
[info] Hello world commonsproject
>

现在,我已将其集成到顶级sbt项目中。

├── build.sbt(top level)
├── commons
│   ├── build.sbt
│   ├── project
│   │   └── Dependencies.scala
│   └── src
│       └── main
├── project
│   └── build.properties
└── src
    ├── main
    │   └── scala
    └── test
        └── scala

build.sbt

lazy val commons = (project in file("commons"))
  .settings(
    name := "subproject",
    version := "1.0",
    scalaVersion := "2.12.2"
  )


lazy val root = (project in file("."))
  .settings(
    name := "rootproject",
    version := "1.0",
    scalaVersion := "2.12.2"
  ).aggregate(commons)

当我从顶层运行sbt时,它失败并出现以下错误:

/mydata/workspace/multiproject/commons/build.sbt:1: error: not found: object Dependencies
import Dependencies._
^
/mydata/workspace/multiproject/commons/build.sbt:6: error: not found: value msg
name := s"$msg commonsproject",
^
sbt.compiler.EvalException: Type error in expression
[error] sbt.compiler.EvalException: Type error in expression
[error] Use 'last' for the full log.</pre>

有人可以告诉我们是否可以将Dependencies.scala保留在common项目中并且仍能从顶级sbt运行它?

目标是能够在顶级或子项目中运行sbt,同时保持每个项目的依赖性。

欢迎实现我想要的其他设计

谢谢

以下是示例项目https://github.com/ccheneson/multiproject

1 个答案:

答案 0 :(得分:2)

来自Effective AWK Programming

  

您不能在子项目中拥有项目子目录或项目/ * .scala文件。 foo / project / Build.scala将被忽略。

在这种情况下,您的commons文件被忽略,因为sort -k1,2 -k3,3rn data.txt \ | while read c1 c2 n ; do if [[ $c1 == $l1 && $c2 == $l2 ]] ; then ((c++)) else c=0 fi if (( c < 3 )) ; then echo $c1 $c2 $n l1=$c1 l2=$c2 fi done 是一个子项目 - 这就是您无法访问它的原因。