Sbt-assembly 未解决的依赖,Scala

Posted

技术标签:

【中文标题】Sbt-assembly 未解决的依赖,Scala【英文标题】:Sbt-assembly unresolved dependency, Scala 【发布时间】:2015-12-19 15:17:49 【问题描述】:

我正在安装 Sbt-Assembly,但现在卡住了。

Sbt Version (from 'sbt about'): 0.13.8
Current project is built against scala 2.11.6
Sbt, sbt plugins, and build definitions are using Scala 2.10.4

project/assembly.sbt

   addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.0")
   resolvers += Resolver.url("bintray-sbt-plugins", url("http://dl.bintray.com/sbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)

build.sbt

   scalaVersion in ThisBuild := "2.11.6"

~/.sbt/0.13/global.sbt

   scalaVersion := "2.11.6"

我意识到 sbt-assembly 适用于 scala 2.10。如果我将我的项目更改为 scala 2.10,我有 2.10 的新不可用依赖项,这是不可取的。有没有办法将我的项目配置为仅将 2.10 用于程序集插件?

  ==== bintray-sbt-plugins: tried
  http://dl.bintray.com/sbt/sbt-plugin-releases/com.eed3si9n/sbt-assembly/scala_2.11/sbt_0.13/0.14.0/ivys/ivy.xml

  ::::::::::::::::::::::::::::::::::::::::::::::
  ::          UNRESOLVED DEPENDENCIES         ::
  ::::::::::::::::::::::::::::::::::::::::::::::
  :: com.eed3si9n#sbt-assembly;0.14.0: not found
  ::::::::::::::::::::::::::::::::::::::::::::::

  Note: Some unresolved dependencies have extra attributes.  
  Check that these dependencies exist with the requested attributes.

      com.eed3si9n:sbt-assembly:0.14.0 (scalaVersion=2.11, sbtVersion=0.13)

【问题讨论】:

【参考方案1】:

只需从global.sbt 中删除scalaVersion

因为SBT is recursive 它在构建您的构建文件时使用来自global.sbtscalaVersion,这会失败,因为SBT 0.13 是使用Scala 2.10 构建的,所有SBT 插件也是如此。

【讨论】:

这很烦人,尤其是因为 SBT 看起来不会很快(n 年后)针对 Scala 2.11+ 构建。我不完全清楚为什么定义要用于由元构建构建的工件的 Scala 版本应该定义 sbt 运行该构建所需的版本。双重烦人,因为这在文档中明确。 反之亦然:元构建需要使用 SBT 库。 Scala 2.11 将在 SBT 1.0 中使用(不出所料,它不能在次要版本中更改)。 很容易看出 SBT 1.0 将使用 Scala 2.11:但时间线仍未定义,这是一个痛点。不过我很好奇:我认为我遇到麻烦的原因是我的元构建在它指定的scalaVersion 上构建了一个正确的构建定义,而我的正确构建无法运行,因为 SBT 没有与那?一旦我停止在我的元构建中指定一个版本,我的正确构建就起作用了(假设我在我的元构建中硬编码了库依赖项)。 (我已经为此奋斗了一周。:P) 不,带有错误scalaVersion 的元构建根本不应该构建构建定义(至少我认为是这样)。 嗯。我认为我所看到的是构建定义已构建但由于在查找库依赖项时属性混淆而死亡。但这可能是讨论它的错误地方。【参考方案2】:

我遇到了类似的问题,将addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3") 添加到项目根目录中的project/plugins.sbt 而不是plugins.sbt 很有帮助。

【讨论】:

感谢@wmiel 的提示【参考方案3】:

我遇到了类似的错误。更改 sbt-assembly 版本(从 0.14.3 到 0.14.5)有效。我的 sbt 版本是 1.0.3,我使用了: addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.5")

【讨论】:

【参考方案4】:

只是不要使用 sbt-assembly! :) Flat-jars 在合并过程中会导致冲突,需要使用 assemblyMergeStrategy 解决。 使用 sbt 提供的 二进制分发 格式插件,它使您能够以二进制脚本、dmg、msi 和 tar.gz 进行分发。

查看sbt-native-packager

【讨论】:

以上是关于Sbt-assembly 未解决的依赖,Scala的主要内容,如果未能解决你的问题,请参考以下文章

sbt-assembly 不包括 scala 库

为啥 sbt 因 sbt.ResolveException 失败:Spark 2.0.0 和 Scala 2.9.1 的未解决依赖关系?

未解决的依赖:org.scala-sbt#sbt; 0.13:运行sbt 0.13时找不到?

如何使用 sbt-assembly 排除测试依赖项

SBT 多项目中未解决的依赖关系

如何在使用 SBT 编译之前进行遮蔽?