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

How to depend on the sources of another project

我有两个使用 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 的来源?

我能想到的最佳替代解决方案是将 unmanagedSourceDirectories 设置添加到我的第二个项目。因此,例如通过执行:

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

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