为啥我的 sbt 项目依赖项不起作用? (坚持尝试远程获取它)

Posted

技术标签:

【中文标题】为啥我的 sbt 项目依赖项不起作用? (坚持尝试远程获取它)【英文标题】:Why doesn't my sbt project dependency work? (insists on trying to fetch it remotely)为什么我的 sbt 项目依赖项不起作用? (坚持尝试远程获取它) 【发布时间】:2014-09-19 01:08:22 【问题描述】:

我想在一个 sbt 项目中为 Scala.js 和 Snap.svg 搭建一座桥,但也包括桥的演示代码。

demos/compile sbt 开始说它无法解决依赖关系。看起来它正试图到达这座桥,就好像它是一个公开的外部项目,但它就在这里,并且可以编译。

我做错了什么?

删除特定于发布的文件似乎并没有带来改变。

目录结构:

├── build.sbt ├── 项目 │   ├── (PublishToBintray.scala) │   ├── build.properties │   ├── build.sbt │   ├── 项目 │   │   └── ... │   └── 目标 │   │   └── ... ├── (publishing.sbt) ├── scalajs_demos │   ├── 主要 │   │   └── 斯卡拉 │   │   └── clock.scala │   └── 目标 │      └── ... ├── 源 │   └── 主要 │   └── 斯卡拉 │   └── 组织 │   └── 斯卡拉杰斯 │   └── snapsvg │   ├── SnapSvg.scala │   └── package.scala └── 目标 └── ...

build.sbt:

scalaJSSettings

name := "Scala.js Snap.svg"

normalizedName := "scalajs-snapsvg"

version := "0.01"

organization := "org.scala-lang.modules.scalajs"

scalaVersion := "2.11.1"

crossScalaVersions := Seq("2.10.4", "2.11.1")   // note: not tested with 2.10.x

libraryDependencies +=
  "org.scala-lang.modules.scalajs" %%% "scalajs-dom" % "0.6"   // TBD: probably need it, just like jQuery bridge does

ScalaJSKeys.jsDependencies +=
  "org.webjars" % "Snap.svg" % "0.3.0" / "snap.svg.js"

homepage := Some(url("http://snapsvg.io/"))

licenses += ("Apache 2.0", url("https://github.com/adobe-webplatform/Snap.svg/blob/master/LICENSE"))

//---
// bridge (main) project
//
lazy val bridge = project.in( file(".") )

//---
// demos project
//
lazy val demos = project.in( file("scalajs_demos") ).dependsOn(bridge)

sbt 出了什么问题:

> 演示/编译 [信息] 更新 file:/Users/asko/Hg/scala-js-snapsvg/ 演示... [信息] 解决 org.scala-lang.modules.scalajs#scalajs-snapsvg_sjs0.5_2.10;0.01 ... [警告] 未找到模块:org.scala-lang.modules.scalajs#scalajs-snapsvg_sjs0.5_2.10;0.01 [警告] ==== 本地:尝试过 [警告] /Users/asko/.ivy2/local/org.scala-lang.modules.scalajs/scalajs-snapsvg_sjs0.5_2.10/0.01/ivys/ivy.xml [警告] ==== 公开:试过 [警告] http://repo1.maven.org/maven2/org/scala-lang/modules/scalajs/scalajs-snapsvg_sjs0.5_2.10/0.01/scalajs-snapsvg_sjs0.5_2.10-0.01.pom [信息] 解决 org.fusesource.jansi#jansi;1.4 ... [警告] :::::::::::::::::::::::::::::::::::::::::::::: [警告] :: 未解决的依赖关系 :: [警告] :::::::::::::::::::::::::::::::::::::::::::::: [警告] :: org.scala-lang.modules.scalajs#scalajs-snapsvg_sjs0.5_2.10;0.01:未找到 [警告] :::::::::::::::::::::::::::::::::::::::::::::: [trace] 堆栈跟踪被抑制:运行最后一个 demos/*:update 以获得完整输出。 [错误] (demos/*:update) sbt.ResolveException: unresolved dependency: org.scala-lang.modules.scalajs#scalajs-snapsvg_sjs0.5_2.10;0.01: not found [错误] 总时间:0 s,完成时间 27.7.2014 22:57:22 >

还有一点,project/plugins.sbt

addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % "0.5.0")

【问题讨论】:

为什么% "test->test".dependsOn(bridge % "test->test") 中?似乎您想要 compile 配置之间的依赖关系(不需要 %),而不是从测试配置到测试配置。 好吧,这对于这个问题来说是不必要的,也许在一般情况下也是如此。我现在删除了这个概念,但它不会影响问题 - 即使没有它,我仍然会遇到相同的依赖错误。 【参考方案1】:

您的问题的根本原因是bridge 项目使用scalaVersion := "2.11.1"(由您的build.sbt 指定,但您的demos 项目使用默认的scalaVersion(在sbt 0.13 中是2.10.2 , IIRC)。dependsOn 关系在尝试关联具有不同 scalaVersions 的项目时会感到困惑。请参阅此问题:https://github.com/sbt/sbt/issues/1448

您可能认为根build.sbt 中的scalaVersion := "2.11.1" 将适用于所有子项目。但这不是真的,它只适用于植根于.(这里是bridge)的子项目。您还必须将此设置(以及您希望共享的其他设置)指定为demossettings() 方法的参数,或在scalajs_demos/build.sbt 文件中。

【讨论】:

太棒了,谢谢塞巴斯蒂安。会在家里尝试,但一定是这样。永远不会解决它! 我希望我能多次对此表示赞同。 在根 build.sbt 中有 scalaVersion 并不意味着它适用于所有子项目!

以上是关于为啥我的 sbt 项目依赖项不起作用? (坚持尝试远程获取它)的主要内容,如果未能解决你的问题,请参考以下文章

为啥当 textview 被 resignedFirstResponder() 时导航栏按钮项不起作用?

使用作曲家安装 laravel 依赖项不起作用

在 JS 中工作时,在 Typescript 项目中添加本地依赖项不起作用

放心 IntelliJ IDEA 中的 3.0.3 maven 依赖项不起作用

为啥 Spinner 中的第一项不起作用

firebase 依赖项不再起作用