尝试使用 Play 2.5.3 但 SBT 在解决依赖关系时冻结

Posted

技术标签:

【中文标题】尝试使用 Play 2.5.3 但 SBT 在解决依赖关系时冻结【英文标题】:Trying to use Play 2.5.3 but SBT freezes while resolving dependency 【发布时间】:2016-09-04 19:55:57 【问题描述】:

我正在使用 intellij 并遵循此文档:

https://www.playframework.com/documentation/2.5.x/Migration25

我像这样更改了plugins.sbt

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.3")

然后就卡住了:

[debug]         tried https://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.play/sbt-plugin/scala_2.10/sbt_0.13/2.5.3/ivys/ivy.xml

我检查了这个存储库,没有 2.5.3 版本。

我做错了什么?

这是我的 build.sbt:

名称 := "播放"

版本 := "1.0"

lazy val play = (project in file(".")).enablePlugins(PlayJava)

scalaVersion := "2.11.7"

libraryDependencies ++= Seq( javaJdbc、缓存、javaWs

)

测试中的 unmanagedResourceDirectories

解析器 += "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases"

这是我的项目/plugins.sbt:

logLevel := Level.Info

resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.3")

另一个问题: 当我更改为 2.4.6 时,它可以工作,但是还有另一个问题,项目刷新失败

java.lang.UnsupportedClassVersionError: com/typesafe/config/ConfigException : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at com.typesafe.sbt.web.SbtWeb$$anonfun$com$typesafe$sbt$web$SbtWeb$$load$1.apply(SbtWeb.scala:535)
at com.typesafe.sbt.web.SbtWeb$$anonfun$com$typesafe$sbt$web$SbtWeb$$load$1.apply(SbtWeb.scala:535)
at scala.Option.fold(Option.scala:157)

我的 JDK 是 1.8

【问题讨论】:

请编辑问题以添加build.sbt 文件和project/plugins.sbt。可能缺少解析器。也可以发布sbt resolvers的执行结果。 【参考方案1】:

错误以某种方式显示您添加的 play 版本中存在拼写错误,请尝试以下 plugins.sbt(这是我的 sbt,对我有用)删除您不想要的插件并添加您的插件使用但小心你使用的版本:

// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.3")

// Web plugins
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.3")
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7")
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0")
addSbtPlugin("org.irundaia.sbt" % "sbt-sassify" % "1.4.2")

// Play enhancer - this automatically generates getters/setters for public fields
// and rewrites accessors of these fields to use the getters/setters. Remove this
// plugin if you prefer not to have this feature, or disable on a per project
// basis using disablePlugins(PlayEnhancer) in your build.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")

// Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using
// enablePlugins(PlayEbean). Note, uncommenting this line will automatically bring in
// Play enhancer, regardless of whether the line above is commented out or not.
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "3.0.1")


// Not necessary but useful for development
// https://github.com/jamesward/play-auto-refresh
//addSbtPlugin("com.jamesward" % "play-auto-refresh" % "0.0.14")

您可以从http://mvnrepository.com/artifact/com.typesafe.play验证版本

由于您使用 2.5.x 验证 2_11 而不是 2_10 下的版本,例如 play_2.11 不是 play_2.10 ,因此请检查您的插件,使用 scala 2.11 而不是 2.10 这可能使 2.4.3 工作而不是 2.5.x 。

【讨论】:

仍然无法正常工作,当我运行 play 2 应用程序时:` [info] Resolving com.typesafe.play#sbt-plugin;2.5.3 ... [debug] sbt-chain-delegate: Checking缓存:依赖项:com.typesafe.play#sbt-plugin;2.5.3 compile=[default(compile)] [debug] 试过repo.typesafe.com/typesafe/ivy-releases/com.typesafe.play/…` @Hao 你试过解析器 += "Typesafe repository" at "repo.typesafe.com/typesafe/releases" 注意我把 http 改成了 https【参考方案2】:

首先,确保你的 sbt 版本是最新的; project/build.properties 应包含:

sbt.version=0.13.11

由于最新的 sbt 版本包含一些新的解析器;您只需将播放插件放入project/plugins.sbt

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.3")

【讨论】:

我确定:sbt.version=0.13.11 我刚刚检查了我的 ivy 缓存,似乎 play sbt-plugin 是从以下位置下载的:dl.bintray.com/sbt/sbt-plugin-releases/com.typesafe.play/… 如果你想检查使用了正确的 sbt 版本,只需启动:sbt sbtVersion 很明显你的仓库是对的。我启动了 sbt sbtVersion,真的是 0.13.11。如何更改存储库?我做错了什么 您是否只是尝试删除 plugins.sbt 中的类型安全解析器?另外,sbt 增加了一种直接为当前项目配置插件的方法;不需要lazy val play... 只需添加一行enablePlugins(PlayJava) 就足够了。

以上是关于尝试使用 Play 2.5.3 但 SBT 在解决依赖关系时冻结的主要内容,如果未能解决你的问题,请参考以下文章

超时解决 sbt-plugin

SBT。解决 play sbt-plugin 的依赖关系

排除 specs2 作为 sbt 中 play 框架的传递依赖

未解决的依赖关系 sbt with play framework

未解决的依赖sbt-play-ebean

未解决的依赖关系:sbt-plugin;2.7.0 尝试编译播放模板项目时