如何依赖另一个项目的来源

时间:2020-09-01 10:50:52

标签: scala sbt scala.js

我有两个使用scalajs的项目,其中第二个项目需要访问第一个项目的源。我定义第一个project.sbt,如下所示:

val commonSettings = Seq(
    name := "project1",
    unmanagedSourceDirectories in Compile +=
        baseDirectory.value / ".." / "shared" / "src" / "main" / "scala",
)

val project1JS = project.in(file("js"))
    .settings(commonSettings: _*)
    .enablePlugins(ScalaJSPlugin)


val project1JVM = project.in(file("jvm"))
    .settings(commonSettings: _*)

为了使项目2能够访问项目1的源,我定义其sbt如下:

val commonSettings = Seq(
    name := "project2",
    unmanagedSourceDirectories in Compile +=
        baseDirectory.value / ".." / "shared" / "src" / "main" / "scala",
)

val project2JS = project.in(file("js"))
    .settings(commonSettings: _*)
    .configure(_.dependsOn(ProjectRef(uri("../project1"), "project1JS")))
    .enablePlugins(ScalaJSPlugin)

val project2JVM = project.in(file("jvm"))
    .settings(commonSettings: _*)
    .configure(_.dependsOn(ProjectRef(uri("../project1"), "project1JVM")))

我的第二个项目可以正常编译,但是这带来了一个问题,因为我现在可以访问project1的类路径,这可能会导致冲突。例如,我收到警告,发现已找到多个logback.xml文件,并且错误的application.conf文件也可能被拾取。

是否有更好的方法来依赖project1的来源?

1 个答案:

答案 0 :(得分:0)

我能想到的最好的替代解决方案是将unmanagedSourceDirectories设置添加到第二个项目中。例如,这样做:

val project2JVM = project.in(file("jvm"))
    .settings(commonSettings: _*)
    .settings(
        unmanagedSourceDirectories in Compile +=
            baseDirectory.value / ".." / ".." / "project1" / "shared" / "src" / "main" / "scala",
    )

Project2现在可以访问Project1中的共享源,而无需访问其类路径上Project1的资源

相关问题