scala - 我可以使用 SBT 从其目录中组装一个子项目吗?

标签 scala sbt

我定义了多项目SBT项目。我在我的根项目中声明了所有依赖项。当我从根目录运行 sbt assembly 时,一切正常。

如何从子项目目录运行sbt assembly?当我尝试执行此操作时,SBT 找不到根 build.sbt 文件中声明的依赖项。

例如,我在 root 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"

所以根本没有问题。

关于scala - 我可以使用 SBT 从其目录中组装一个子项目吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70832691/

相关文章:

scala - 简洁明了的 Scala HTTP 客户端库

scala - Scala 中的 OSGi 注释(Activate、Reference、Component)

sbt - 具有模糊版本错误的 Akka Testkit 错误

scala - SBT scalariform 插件多次格式化同一内容,是否可以执行一次?

scala - sbt无法解决依赖关系

scala - Sbt native 打包程序找不到 SystemdPlugin

eclipse - 安装 sbteclipse

java - 看似公共(public)功能的不可访问功能

scala - Scala 中的结构类型 : use abstract type in refinement

scala - 类型推断有多昂贵?