【问题标题】:SBT is not generating bytecode class files for dependencySBT 没有为依赖生成字节码类文件
【发布时间】:2018-03-02 21:17:23
【问题描述】:

我有下一个 build.sbt 文件:

name := "olbico-spark-solution"

version := "0.2"
scalaVersion := "2.11.8"

resolvers += "Typesafe ivy repository" at "https://repo.typesafe.com/typesafe/ivy-releases/"
resolvers += "Typesafe maven repository" at "https://repo.typesafe.com/typesafe/maven-releases/"

mainClass in (Compile, run) := Some("com.olbico.spark.MergeManager")
mainClass in (Compile, packageBin) := Some("com.olbico.spark.MergeManager")

mappings in (Compile, packageBin) += {
  (baseDirectory.value / "src/main/config/current.conf") -> "config/current.conf"
}

libraryDependencies ++= {
  val sparkVer = "2.2.0"
  Seq(
    "org.apache.spark" %% "spark-core" % sparkVer % "provided" withSources(),
    "org.apache.spark" %% "spark-sql" % sparkVer % "provided" withSources(),
    "com.typesafe" % "config" % "1.3.1" withSources()
  )
}

我想要实现的是向 com.typesafe.config 添加一个依赖项。使用当前的 sbt 配置,我希望最终的字节码具有以下结构:

~/test-spark-solution/target/scala-2.11/classes

 -com
     -olbico
          -spark
                JobManager$class.class
                JobManager.class
                ... more classes
     -typesafe
              -config
                    Optional.class
                    DefaultConfigLoadingStrategy.class
                    ... more classes

或者至少将 config-1.3.1.jar 添加到最终的包 jar 中。这两种解决方案都被我接受了,尽管现在这些都没有完成。在 ~/olbico-spark-solution/target/scala-2.11/classes 我有以下结构:

 -com
     -olbico
          -spark
                JobManager$class.class
                JobManager.class
                ... more classes

同样在打包后没有 config-1.3.1.jar 包含在包 jar 中。使用 SBT 向我的项目添加单个依赖项的最佳方法是什么?

【问题讨论】:

    标签: scala apache-spark intellij-idea sbt


    【解决方案1】:

    Java/Scala 世界中的简单打包并不意味着创建可部署的可执行文件,而只是模块的存档:您需要使用 SBT 程序集或 SBT 包来获得完全可部署的 jar。

    【讨论】:

    • 感谢您澄清这个 Edmondo 我知道这一点,尽管我试图找出通过 SBT 制作可部署 jar 的最佳方法,而不使用像 SBT 程序集这样的第 3 方插件。由于我是 scala 世界的新手,我认为 SBT 会以某种方式提供一种将声明的依赖项包含到生成的 jar 包中的方法。它已经在下载所有依赖项(在 ~/.ivy2/cache/ 下),为什么不也嵌入它们呢?但正如你提到的,这可能是一个幼稚的假设
    • 这就是包装设计的工作原理,并且有很好的理由。如果您愿意,我可以详细说明我的答案
    • 如果您能提供更多详细信息,我将不胜感激,因为我不清楚为什么默认情况下我明确包含在我的依赖项中的库的依赖项不包含在字节码或 lib 文件夹下
    猜你喜欢
    • 2014-12-27
    • 2017-10-05
    • 2014-06-30
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多