scala – 控制依赖性加载SBT多项目的歧义

我有一个SBT
Scala多项目,具有以下结构:

multiprojectRoot        
    project/SharedProjectBuildCode.scala
    project1
        src/sourceFiles
        project1-build.sbt
    project2
        src/sourceFiles
        project2-build.sbt
    projectN
        src/sourceFiles
        projectN-build.sbt

> multiprojectRoot / project / SharedProjectBuildCode.scala:包含使用dependsOn创建对本地项目的依赖项的多项目定义.例如:

lazy val project2 = Project(
    ...
).dependsOn(project1)

> multiprojectRoot / project2 / project2-build.sbt:包含给定项目的设置和依赖项.例如:

name := "project2"

libraryDependencies ++= Seq(          
          ...
          "my.company" % "project1" % "1.0"
)

第一次依赖于project1是在SharedProjectBuildCode.scala文件中使用dependsOn声明的,第二次是在独立的project2-build.sbt构建定义文件中创建的.

因此,project2定义包含:

>对project1或.的模糊依赖
>对project1的双重依赖

我们希望保留这个项目结构,因为它对我们当前的工作流程是最好的:

>独立的.sbt文件为我们的持续交付服务器上的每个项目提供独立的部署目的.
>带有dependsOn的多项目.scala文件用于促进开发,允许我们避免诸如连续publishLocal之类的事情.

我们需要控制这种依赖性歧义.你能帮助我吗?

最佳答案 我认为你应该在SharedProjectBuildCode.scala中

lazy val root = Project(id = "Main-Project",
    base = file(".")) aggregate(project1, project2,..)

lazy val project2 = Project(id = "project2",
    base = file("project1")).dependsOn(project1)

...

而且不再需要在build.sbt中添加依赖项了.

点赞