我可以使用 SBT 从其目录中组装一个子项目吗?
Can I assembly one subproject from its directory with SBT?
我定义了多项目 SBT 项目。我在我的根项目中声明了所有依赖项。当我从根目录 运行 sbt assembly
一切正常时。
如何从子项目目录中 运行 sbt assembly
?当我尝试这样做时,SBT 找不到在根 build.sbt 文件中声明的依赖项。
例如,我在根目录下做这样的事情 build.sbt:
ThisBuild / organization := "org.example"
ThisBuild / version := "1.0"
ThisBuild / scalaVersion := "2.11.12"
...
lazy val commonSettings = Seq(
libraryDependecies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion
, "org.apache.spark" %% "spark-hive" % sparkVersion
, "org.apache.spark" %% "spark-sql" % sparkVersion
// other dependencies
).map(_% Provided) ++ Seq(
"org.postgresl" % "postgresql" % "42.2.24"
// other dependencies
)
)
lazy val root = (project in file("."))
.aggregate(subproject)
.settings(
name := "root"
)
lazy val subproject = (project in file("subproject"))
.setting(
commonSettings,
name := "subproject"
//...Other settings
)
val allProjects = ScopeFilter(
inProject(
subproject
)
)
build.sbt 来自子项目目录:
assembly / mainClass := Some("org.example.Main")
//other settings
当我从根目录 运行 sbt assembly
一切正常。
当我从子项目目录 运行 它时,我得到这样的错误:
object apache is not a member of package org
import org.apache.spark.sql.expressions.UserDefinedFunction
是否可以从子项目目录编译 jar 文件?
您必须从定义主项目的目录构建。
但是您不必总是构建所有内容。你几乎可以做到:
# in project root directory
sbt "subproject / assembly"
所以连问题都没有。
我定义了多项目 SBT 项目。我在我的根项目中声明了所有依赖项。当我从根目录 运行 sbt assembly
一切正常时。
如何从子项目目录中 运行 sbt assembly
?当我尝试这样做时,SBT 找不到在根 build.sbt 文件中声明的依赖项。
例如,我在根目录下做这样的事情 build.sbt:
ThisBuild / organization := "org.example"
ThisBuild / version := "1.0"
ThisBuild / scalaVersion := "2.11.12"
...
lazy val commonSettings = Seq(
libraryDependecies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion
, "org.apache.spark" %% "spark-hive" % sparkVersion
, "org.apache.spark" %% "spark-sql" % sparkVersion
// other dependencies
).map(_% Provided) ++ Seq(
"org.postgresl" % "postgresql" % "42.2.24"
// other dependencies
)
)
lazy val root = (project in file("."))
.aggregate(subproject)
.settings(
name := "root"
)
lazy val subproject = (project in file("subproject"))
.setting(
commonSettings,
name := "subproject"
//...Other settings
)
val allProjects = ScopeFilter(
inProject(
subproject
)
)
build.sbt 来自子项目目录:
assembly / mainClass := Some("org.example.Main")
//other settings
当我从根目录 运行 sbt assembly
一切正常。
当我从子项目目录 运行 它时,我得到这样的错误:
object apache is not a member of package org
import org.apache.spark.sql.expressions.UserDefinedFunction
是否可以从子项目目录编译 jar 文件?
您必须从定义主项目的目录构建。
但是您不必总是构建所有内容。你几乎可以做到:
# in project root directory
sbt "subproject / assembly"
所以连问题都没有。