如何在build.sbt中添加依赖项目以运行sbt编译



我是sbt构建的新手。 我想将依赖项目(例如Proj A(的java文件添加到我的编译项目(Proj B(中。 在 Proj B 中运行 sbt 编译会抛出错误,指出找不到依赖项目的 Java 包/类。 我浏览了链接:https://www.scala-sbt.org/0.13/docs/Multi-Project.html 但我不清楚添加此依赖项以使其工作。

我尝试在build.sbt中添加以下行,但它不起作用。 lazy val projB = project.dependsOn(/projA(

更新

build.sbt of projB:

organization := "com.org"
name := "projB"
version := "1"
resolvers ++= Seq(
"Typesafe" at "http://repo.typesafe.com/typesafe/releases/",
"Java.net Maven2 Repository" at "http://download.java.net/maven/2/",
)
lazy val projB = project.dependsOn(projA)
// the library dependencies of springframework here

Proj A 的 build.sbt:

organization := "com.org"
name := "proj A"
version := "1"
resolvers ++= Seq(
"Typesafe" at "http://repo.typesafe.com/typesafe/releases/",
"Java.net Maven2 Repository" at "http://download.java.net/maven/2/",
)
// the library dependencies of springframework here

当我在 proj B 上进行 sbt 编译时,它会抛出错误,找不到依赖类。类 Hbase 位于 Proj A 中。

[error] import com.org.config.Hbase;
[error] **hbaseHbaseDAO.java:38:1:
cannot find symbol
[error]   symbol:   class Hbase
[error]   location: class com.org.hbase.HbaseDAO
[error]         private Hbase hbase;
[error] (Compile / compileIncremental) javac returned non-zero exit code
[error] Total time: 6 s, completed 29/08/2019 9:58:39 AM

在建议之后更新了build.sbt:

inThisBuild(
Seq(
organization := "com.org",
version := "1",
resolvers ++= Seq(
"Typesafe" at "http://repo.typesafe.com/typesafe/releases/",
"Java.net Maven2 Repository" at "http://download.java.net/maven/2/",
)
)
)
lazy val root = project
.in(file("."))
.aggregate(projA,projB)
lazy val projA = project.settings(
// project A settings and library dependencies
libraryDependencies += "org.springframework.boot" % "spring-boot-starter- 
parent" % "2.1.6.RELEASE" pomOnly()
libraryDependencies += "org.springframework.boot" % "spring-boot-starter- 
web" % "2.1.6.RELEASE"
libraryDependencies += "org.springframework.data" % "spring-data-hadoop- 
hbase" % "2.3.0.RELEASE"
libraryDependencies += "org.mortbay.jetty" % "jetty" % "7.0.0.pre5"
libraryDependencies += "io.netty" % "netty-all" % "5.0.0.Alpha2"
libraryDependencies += "commons-beanutils" % "commons-beanutils" % "1.9.4"
libraryDependencies += "commons-beanutils" % "commons-beanutils-core" % 
"1.8.3"
libraryDependencies += "xerces" % "xercesImpl" % "2.12.0"
libraryDependencies += "org.apache.hadoop" % "hadoop-yarn-server- 
nodemanager" % "3.2.0"
libraryDependencies += "org.apache.hadoop" % "hadoop-common" % "3.2.0"
libraryDependencies += "org.apache.hadoop" % "hadoop-common" % "2.7.0"
libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "3.2.0"
libraryDependencies += "org.apache.hbase" % "hbase-client" % "2.1.1"
libraryDependencies += "org.apache.hbase" % "hbase" % "2.1.1" pomOnly()
libraryDependencies += "org.apache.hbase" % "hbase-common" % "2.1.1"
)
lazy val projB = project
.dependsOn(projA)
.settings(
// project B settings and library dependencies
libraryDependencies += "org.springframework.boot" % "spring-boot-starter- 
parent" % "2.1.6.RELEASE" pomOnly()
libraryDependencies += "org.springframework.boot" % "spring-boot-starter- 
web" % "2.1.6.RELEASE"
libraryDependencies += "org.springframework.data" % "spring-data-hadoop- 
hbase" % "2.3.0.RELEASE"
libraryDependencies += "org.mortbay.jetty" % "jetty" % "7.0.0.pre5"
libraryDependencies += "io.netty" % "netty-all" % "5.0.0.Alpha2"
libraryDependencies += "commons-beanutils" % "commons-beanutils" % "1.9.4"
libraryDependencies += "commons-beanutils" % "commons-beanutils-core" % 
"1.8.3"
libraryDependencies += "xerces" % "xercesImpl" % "2.12.0"
libraryDependencies += "org.apache.hadoop" % "hadoop-yarn-server- 
nodemanager" % "3.2.0"
libraryDependencies += "com.fasterxml.jackson.core" % "jackson-databind" % 
"2.10.0.pr2"
libraryDependencies += "org.apache.hadoop" % "hadoop-common" % "3.2.0"
libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "3.2.0"
libraryDependencies += "org.apache.hbase" % "hbase-client" % "2.1.1"
libraryDependencies += "org.apache.hbase" % "hbase" % "2.1.1" pomOnly()
libraryDependencies += "org.apache.hbase" % "hbase-common" % "2.1.1"
)

在项目设置 projA 和 projB 中的以下库依赖项之后编译 sbt 时引发错误

libraryDependencies += "org.springframework.boot" % "spring-boot-starter- 
web" % "2.1.6.RELEASE"

"("预期,但在 projA 设置中为此行抛出找到的字符串文本,并且

";"是预期的,但在 projB 设置中为此行抛出找到的字符串文本。

我对这个错误没有太多线索。

查看您发布的两个片段,我猜您有两个单独的build.sbt文件,每个子项目一个。这使得它们独立,一个项目看不到另一个项目。虽然子项目可能有多个build.sbt文件,但建议在项目根目录的单个build.sbt文件中定义整个多项目生成。

例如,如果您像这样构建项目:

├── project
│  ├── build.properties
│  └── plugins.sbt
├── projA
│  └── src
├── projB
│  └── src
└── build.sbt

然后,您可以将所有构建设置和子项目关系放在根build.sbt中:

inThisBuild(
Seq(
organization := "com.org",
version := "1",
resolvers ++= Seq(
"Typesafe" at "http://repo.typesafe.com/typesafe/releases/",
"Java.net Maven2 Repository" at "http://download.java.net/maven/2/",
)
)
)
lazy val root = project
.in(file("."))
.aggregate(projA, projB)
lazy val projA = project
.settings(
// project A settings and library dependencies
)
lazy val projB = project
.dependsOn(projA)
.settings(
// project B settings and library dependencies
)

然后,如果从项目的根目录启动 sbt shell,则可以调用compile(或任何其他任务(来编译projAprojB,或者可以调用projA/compile来专门编译该子项目。

您已经在阅读文档,因此您知道在哪里可以找到更多信息。请注意,您提供的链接指向旧文档,顶部有一个指向新页面的横幅:https://www.scala-sbt.org/1.x/docs/Multi-Project.html

最新更新