尝试使用 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 在解决依赖关系时冻结的主要内容,如果未能解决你的问题,请参考以下文章
排除 specs2 作为 sbt 中 play 框架的传递依赖