为啥我的 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
:
【问题讨论】:
为什么% "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
)的子项目。您还必须将此设置(以及您希望共享的其他设置)指定为demos
的settings()
方法的参数,或在scalajs_demos/build.sbt
文件中。
【讨论】:
太棒了,谢谢塞巴斯蒂安。会在家里尝试,但一定是这样。永远不会解决它! 我希望我能多次对此表示赞同。 在根 build.sbt 中有 scalaVersion 并不意味着它适用于所有子项目!以上是关于为啥我的 sbt 项目依赖项不起作用? (坚持尝试远程获取它)的主要内容,如果未能解决你的问题,请参考以下文章
为啥当 textview 被 resignedFirstResponder() 时导航栏按钮项不起作用?
在 JS 中工作时,在 Typescript 项目中添加本地依赖项不起作用