【问题标题】:How to build play framework sample application using sbt (not play)?如何使用 sbt(不是 play)构建 play framework 示例应用程序?
【发布时间】:2014-07-09 10:40:34
【问题描述】:

在示例应用程序中调用 sbt 时,我得到了 NPE。

请注意:我们无法使用“play”运行整个应用程序:我们需要能够通过 sbt 运行它。

C:\apps\playframework\samples\scala\websocket-chat>sbt
java.lang.NullPointerException
        at sbt.StringUtilities$.nonEmpty(StringUtilities.scala:14)
        at sbt.impl.GroupArtifactID.$percent(DependencyBuilders.scala:50)
        at $f01bf36bc7174607fa7f$.$sbtdef(C:\apps\playframework\samples\scala\websocket-chat\project\plugins.sbt:8)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at sbt.compiler.Eval$.getValue(Eval.scala:420)
        at sbt.compiler.Eval$$anonfun$4.apply(Eval.scala:87)
        at sbt.compiler.Eval$$anonfun$4.apply(Eval.scala:87)
        at sbt.EvaluateConfigurations$$anonfun$evaluateSetting$1.apply(EvaluateConfigurations.scala:150)
        at sbt.EvaluateConfigurations$$anonfun$evaluateSetting$1.apply(EvaluateConfigurations.scala:148)
        at sbt.EvaluateConfigurations$$anonfun$flatten$1$$anonfun$apply$5.apply(EvaluateConfigurations.scala:115)
        at sbt.EvaluateConfigurations$$anonfun$flatten$1$$anonfun$apply$5.apply(EvaluateConfigurations.scala:115)
        at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
        at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
        at scala.collection.immutable.List.foreach(List.scala:318)
        at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251)
        at scala.collection.AbstractTraversable.flatMap(Traversable.scala:105)
        at sbt.EvaluateConfigurations$$anonfun$flatten$1.apply(EvaluateConfigurations.scala:115)
        at sbt.EvaluateConfigurations$$anonfun$flatten$1.apply(EvaluateConfigurations.scala:115)
        at sbt.EvaluateConfigurations$$anonfun$evaluateSbtFile$1.apply(EvaluateConfigurations.scala:110)
        at sbt.EvaluateConfigurations$$anonfun$evaluateSbtFile$1.apply(EvaluateConfigurations.scala:110)
        at sbt.Load$.sbt$Load$$loadSettingsFile$1(Load.scala:507)
        at sbt.Load$$anonfun$sbt$Load$$memoLoadSettingsFile$1$1.apply(Load.scala:502)
        at sbt.Load$$anonfun$sbt$Load$$memoLoadSettingsFile$1$1.apply(Load.scala:501)
        at scala.Option.getOrElse(Option.scala:120)
        at sbt.Load$.sbt$Load$$memoLoadSettingsFile$1(Load.scala:501)
        at sbt.Load$$anonfun$loadSettings$1$2.apply(Load.scala:500)
        at sbt.Load$$anonfun$loadSettings$1$2.apply(Load.scala:500)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
        at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
        at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
        at scala.collection.AbstractTraversable.map(Traversable.scala:105)
        at sbt.Load$.loadSettings$1(Load.scala:500)
        at sbt.Load$.sbt$Load$$expand$1(Load.scala:523)
        at sbt.Load$.loadSettings(Load.scala:528)
        at sbt.Load$.sbt$Load$$loadSbtFiles$1(Load.scala:464)
        at sbt.Load$.defaultLoad$1(Load.scala:475)

编辑这里是项目\plugins.sbt

logLevel := Level.Warn

addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.1.5")

addSbtPlugin("com.typesafe.sbt" % "sbt-scalariform" % "1.0.1")

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.6.0")

addSbtPlugin("play" % "sbt-plugin" % Option(System.getProperty("play.version")).getOrElse("2.0"))

libraryDependencies <+= sbtVersion { sv =>
  "org.scala-sbt" % "scripted-plugin" % sv
}

行:

addSbtPlugin("play" % "sbt-plugin" % Option(System.getProperty("play.version")).getOrElse("2.0"))

导致以下情况:

[warn]
sbt.ResolveException: unresolved dependency: play#sbt-plugin;2.0: not found
        at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:214)

编辑更多详情

C:\apps\play\framework>sbt package
"sbt13"
Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true
[info] Loading project definition from C:\apps\play\framework\project
[warn]  module not found: play#sbt-plugin;2.2.3
[warn] ==== typesafe-ivy-releases: tried
[warn]   http://repo.typesafe.com/typesafe/ivy-releases/play/sbt-plugin/scala_2.9.2/sbt_0.12/2.2.3/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn]   http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases/play/sbt-plugin/scala_2.9.2/sbt_0.12/2.2.3/ivys/ivy.xml
[warn] ==== local: tried
[warn]   C:\Users\S80035683\.ivy2\local\play\sbt-plugin\scala_2.9.2\sbt_0.12\2.2.3\ivys\ivy.xml
[warn] ==== public: tried
[warn]   http://repo1.maven.org/maven2/play/sbt-plugin_2.9.2_0.12/2.2.3/sbt-plugin-2.2.3.pom
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: play#sbt-plugin;2.2.3: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]
[warn]  Note: Some unresolved dependencies have extra attributes.  Check that these dependencies exist with the requested attributes.
[warn]          play:sbt-plugin:2.2.3 (sbtVersion=0.12, scalaVersion=2.9.2)
[warn]
sbt.ResolveException: unresolved dependency: play#sbt-plugin;2.2.3: not found
        at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:214)
        at sbt.IvyActions$$anonfun$update$1.apply(IvyActions.scala:122)

【问题讨论】:

    标签: playframework-2.0 sbt


    【解决方案1】:

    编辑project/plugins.sbt 并更改

    addSbtPlugin("com.typesafe.play" % "sbt-plugin" % System.getProperty("play.version"))
    

    addSbtPlugin("play" % "sbt-plugin" % Option(System.getProperty("play.version")).getOrElse("2.2.3"))
    

    您还可以获得更新的 Play 版本,该问题似乎已得到解决。

    如果需要,您还可以设置系统属性play.version

    编辑

    确保您在 plugins.sbt 的解析器中包含 Typesafe 存储库。

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

    【讨论】:

    • 嗨,play.version 和这个有什么关系?无论如何,我会尝试你所说的 - 但希望得到解释。
    • 只是sbt-plugin绑定了play版本(不同的play版本会有不同的sbt插件)。通常版本被设置为系统属性,但对于您使用的播放版本似乎是一个错误。
    • plugins.sbt 没有你提到的具体条目。我已将其复制到 OP 供您阅读(并表明我添加了您建议的行)。该额外的行有错误(也包括在 OP 中)
    • 你应该有这个条目。但是,我犯了一个错误,这是在原始plugins.sbt 中的做法所暗示的。该版本实际上应该是“2.0.1”或您正在使用的任何播放版本。我已经更新了我的答案。顺便提一句。您使用的是哪个版本的 Play?
    • 2.2.X 。我在哪里可以看到精确的版本?显然我根本不使用游戏。这是/现在是第一次尝试。
    【解决方案2】:

    这是基于 lpiepiora 的回答,但是是最新的(因为他建议的修复对我不起作用)。我运行所有内容的最新版本(截至 2016 年 4 月 4 日),并使用以下内容构建和运行 scala 播放示例:

    编辑 project/plugins.sbt 并确保你有这一行:

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

    将播放版本明确指定为 2.2.3 就可以正常工作,因为这是示例的目标。

    【讨论】:

    • 感谢您更新答案。
    猜你喜欢
    • 2015-04-19
    • 2014-10-27
    • 2018-06-05
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多