播放后出现编译错误!框架新应用指南

Compilation error following Play! Framework NewApplication guide

我使用 Fedora 22 OS,我正在尝试开始使用 Play!框架。自然地,我正在尝试尽可能构建最简单的应用程序,这样我就可以有一个起点。

我尝试尽可能地遵循文档 (https://www.playframework.com/documentation/2.4.x/NewApplication) 中的指南,但我在这里没有成功。当我在项目的基础文件夹中调用激活器并指示我一些未解决的依赖项时,它失败了。我将 post 我采取的步骤,以便我可以尽可能清楚地展示我所做的事情和问题,包括一些关于 Java 的信息(我在某处读到我应该使用 Oracle Java而不是OpenJDK,所以我下载了最新的Java SE JDK 7)和sbt,我认为这与进程有关。 我的 OS 是葡萄牙语,所以有几行是葡萄牙语,但由于它们指的是众所周知的命令(基本上是命令选项),我认为这不会影响理解。

su -

[root@localhost ~]# alternatives --config java

Há 3 programas que oferecem "java".

  Seleção    Comando
-----------------------------------------------
*+ 1           /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.45-36.b13.fc22.x86_64/jre/bin/java
   2           /usr/java/jdk1.7.0_79/bin/java
   3           /usr/java/default/jre/bin/java

Indique para manter a seleção atual[+] ou digite o número da seleção: 2

[root@localhost ~]# alternatives --config javac

Há 1 programa que oferece "javac".

  Seleção    Comando
-----------------------------------------------
*+ 1           /usr/java/default/bin/javac


[root@localhost ~]# alternatives --config javaws

Há 1 programa que oferece "javaws".

  Seleção    Comando
-----------------------------------------------
*+ 1           /usr/java/default/jre/bin/javaws

Indique para manter a seleção atual[+] ou digite o número da seleção: 1  

[root@localhost ~]# alternatives --config jar

Há 1 programa que oferece "jar".

  Seleção    Comando
-----------------------------------------------
*+ 1           /usr/java/default/bin/jar

Indique para manter a seleção atual[+] ou digite o número da seleção: 1

[root@localhost ~]# exit
logout

[gscofano@localhost new-project]$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

[gscofano@localhost new-project]$ javac -version
javac 1.7.0_79


[gscofano@localhost new-project]$ pwd 
/home/gscofano/Documentos/Programacao/play/play-2.4.2


[gscofano@localhost new-project]$ ls
activator-1.3.5-minimal


[gscofano@localhost new-project]$ mkdir new-project


[gscofano@localhost new-project]$ cd ./new-project


[gscofano@localhost new-project]$ sbt about

[info] Set current project to new-project (in build file:/home/gscofano/Documentos/Programacao/play/play-2.4.2/new-project/)
[info] This is sbt 0.13.1
[info] The current project is {file:/home/gscofano/Documentos/Programacao/play/play-2.4.2/new-project/}new-project 0.1-SNAPSHOT
[info] The current project is built against Scala 2.10.4
[info] 
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.4


[gscofano@localhost new-project]$ ../activator-1.3.5-minimal/activator new first-app play-java

OK, application "first-app" is being created using the "play-java" template.

To run "first-app" from the command line, "cd first-app" then:
/home/gscofano/Documentos/Programacao/play/play-2.4.2/new-project/first-app/activator run

To run the test for "first-app" from the command line, "cd first-app" then:
/home/gscofano/Documentos/Programacao/play/play-2.4.2/new-project/first-app/activator test

To run the Activator UI for "first-app" from the command line, "cd first-app" then:
/home/gscofano/Documentos/Programacao/play/play-2.4.2/new-project/first-app/activator ui


[gscofano@localhost new-project]$ cd ./first-app


[gscofano@localhost first-app]$ ./activator
[info] Loading project definition from /home/gscofano/Documentos/Programacao/play/play-2.4.2/new-project/first-app/project
[info] Updating {file:/home/gscofano/Documentos/Programacao/play/play-2.4.2/new-project/first-app/project/}first-app-build...
[info] Resolving org.scala-sbt#precompiled-2_9_3;0.13.8 ...
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: org.scala-lang#scala-library;2.10.4: configuration not found in org.scala-lang#scala-library;2.10.4: 'master(compile)'. Missing configuration: 'compile'. It was required from com.typesafe#npm_2.10;1.1.1 compile
[warn]  :: org.scala-lang#scala-compiler;2.10.4: configuration not found in org.scala-lang#scala-compiler;2.10.4: 'master(compile)'. Missing configuration: 'compile'. It was required from com.typesafe.play#twirl-compiler_2.10;1.1.1 compile
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] 
[warn]  Note: Unresolved dependencies path:
[warn]      org.scala-lang:scala-library:2.10.4 ((sbt.Classpaths) Defaults.scala#L1203)
[warn]        +- org.scala-sbt:control:0.13.8
[warn]        +- org.scala-sbt:io:0.13.8
[warn]        +- org.scala-sbt:classpath:0.13.8
[warn]        +- org.scala-sbt:incremental-compiler:0.13.8
[warn]        +- org.scala-sbt:persist:0.13.8
[warn]        +- org.scala-sbt:compiler-integration:0.13.8
[warn]        +- org.scala-sbt:actions:0.13.8
[warn]        +- org.scala-sbt:main:0.13.8
[warn]        +- org.scala-sbt:sbt:0.13.8
[warn]        +- default:first-app-build:0.1-SNAPSHOT (sbtVersion=0.13, scalaVersion=2.10)
[warn]      org.scala-lang:scala-compiler:2.10.4
[warn]        +- org.scala-sbt:classpath:0.13.8
[warn]        +- org.scala-sbt:incremental-compiler:0.13.8
[warn]        +- org.scala-sbt:persist:0.13.8
[warn]        +- org.scala-sbt:compiler-integration:0.13.8
[warn]        +- org.scala-sbt:actions:0.13.8
[warn]        +- org.scala-sbt:main:0.13.8
[warn]        +- org.scala-sbt:sbt:0.13.8
[warn]        +- default:first-app-build:0.1-SNAPSHOT (sbtVersion=0.13, scalaVersion=2.10)
sbt.ResolveException: unresolved dependency: org.scala-lang#scala-library;2.10.4: configuration not found in org.scala-lang#scala-library;2.10.4: 'master(compile)'. Missing configuration: 'compile'. It was required from com.typesafe#npm_2.10;1.1.1 compile
unresolved dependency: org.scala-lang#scala-compiler;2.10.4: configuration not found in org.scala-lang#scala-compiler;2.10.4: 'master(compile)'. Missing configuration: 'compile'. It was required from com.typesafe.play#twirl-compiler_2.10;1.1.1 compile
    at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:291)
    at sbt.IvyActions$$anonfun$updateEither.apply(IvyActions.scala:188)
    at sbt.IvyActions$$anonfun$updateEither.apply(IvyActions.scala:165)
    at sbt.IvySbt$Module$$anonfun$withModule.apply(Ivy.scala:155)
    at sbt.IvySbt$Module$$anonfun$withModule.apply(Ivy.scala:155)
    at sbt.IvySbt$$anonfun$withIvy.apply(Ivy.scala:132)
    at sbt.IvySbt.sbt$IvySbt$$action(Ivy.scala:57)
    at sbt.IvySbt$$anon.call(Ivy.scala:65)
    at xsbt.boot.Locks$GlobalLock.withChannel(Locks.scala:93)
    at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries(Locks.scala:78)
    at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock.apply(Locks.scala:97)
    at xsbt.boot.Using$.withResource(Using.scala:10)
    at xsbt.boot.Using$.apply(Using.scala:9)
    at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:58)
    at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:48)
    at xsbt.boot.Locks$.apply0(Locks.scala:31)
    at xsbt.boot.Locks$.apply(Locks.scala:28)
    at sbt.IvySbt.withDefaultLogger(Ivy.scala:65)
    at sbt.IvySbt.withIvy(Ivy.scala:127)
    at sbt.IvySbt.withIvy(Ivy.scala:124)
    at sbt.IvySbt$Module.withModule(Ivy.scala:155)
    at sbt.IvyActions$.updateEither(IvyActions.scala:165)
    at sbt.Classpaths$$anonfun$sbt$Classpaths$$work.apply(Defaults.scala:1369)
    at sbt.Classpaths$$anonfun$sbt$Classpaths$$work.apply(Defaults.scala:1365)
    at sbt.Classpaths$$anonfun$doWork$$anonfun.apply(Defaults.scala:1399)
    at sbt.Classpaths$$anonfun$doWork$$anonfun.apply(Defaults.scala:1397)
    at sbt.Tracked$$anonfun$lastOutput.apply(Tracked.scala:37)
    at sbt.Classpaths$$anonfun$doWork.apply(Defaults.scala:1402)
    at sbt.Classpaths$$anonfun$doWork.apply(Defaults.scala:1396)
    at sbt.Tracked$$anonfun$inputChanged.apply(Tracked.scala:60)
    at sbt.Classpaths$.cachedUpdate(Defaults.scala:1419)
    at sbt.Classpaths$$anonfun$updateTask.apply(Defaults.scala:1348)
    at sbt.Classpaths$$anonfun$updateTask.apply(Defaults.scala:1310)
    at scala.Function1$$anonfun$compose.apply(Function1.scala:47)
    at sbt.$tilde$greater$$anonfun$$u2219.apply(TypeFunctions.scala:40)
    at sbt.std.Transform$$anon.work(System.scala:63)
    at sbt.Execute$$anonfun$submit$$anonfun$apply.apply(Execute.scala:226)
    at sbt.Execute$$anonfun$submit$$anonfun$apply.apply(Execute.scala:226)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
    at sbt.Execute.work(Execute.scala:235)
    at sbt.Execute$$anonfun$submit.apply(Execute.scala:226)
    at sbt.Execute$$anonfun$submit.apply(Execute.scala:226)
    at sbt.ConcurrentRestrictions$$anon$$anonfun.apply(ConcurrentRestrictions.scala:159)
    at sbt.CompletionService$$anon.call(CompletionService.scala:28)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
[error] (*:update) sbt.ResolveException: unresolved dependency: org.scala-lang#scala-library;2.10.4: configuration not found in org.scala-lang#scala-library;2.10.4: 'master(compile)'. Missing configuration: 'compile'. It was required from com.typesafe#npm_2.10;1.1.1 compile
[error] unresolved dependency: org.scala-lang#scala-compiler;2.10.4: configuration not found in org.scala-lang#scala-compiler;2.10.4: 'master(compile)'. Missing configuration: 'compile'. It was required from com.typesafe.play#twirl-compiler_2.10;1.1.1 compile
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?

这里是build.sbt

name := """first-app"""

version := "1.0-SNAPSHOT"

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

scalaVersion := "2.11.6"

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs
)

// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator

构建属性

#Activator-generated Properties
#Sat Aug 01 03:30:20 BRT 2015
template.uuid=4908845b-9453-410b-af0f-404c1440dff1
sbt.version=0.13.8

和plugins.sbt

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

// Web plugins
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.0.6")
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")

// 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(SbtEbean). 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" % "1.0.0")

我试图用空行分隔最后一个文件中的行。没有任何变化。

我试过 google 这个,但找不到类似的东西。如果有人可以帮助我解决这个问题,我将不胜感激。最后,我要感谢所有花时间阅读这个问题的读者。

编辑:我刚刚意识到我正在使用 /usr/default/jre/bin/javac。当我尝试 Java SDK 8.

时,我将其固定为 /usr/jdk1.8.0_51/jre/bin/javac

尝试使用Java 8.根据https://www.playframework.com/download你需要JDK8.

我也遇到了 Fedora 22 和玩的问题。我在某处读到 Fedora 中有一个错误。我无法修复它:(

终于,我找到了解决方案。那是一个艰难的过程。

所以,问题是一些依赖项,出于某种原因,sbt 无法自行下载。为了解决这个问题,我设置了一个 ivy build 文件并使用 ant 下载它们,而不使用 play、sbt 或任何相关的东西。我会 post 在我的 post.

文章末尾提供更多详细信息

我使用了 activator 用户界面 (/play-2.4.2/activator-dist-1.3.5/activator ui),它再次开始构建 uild 项目。它经历了有问题的点,后来失败了。更多无法下载的依赖项。我使用相同的方法下载它们。它适用于除一个 com.typesafe.sbtrc#actor-client-2-10;0.3.1 之外的所有依赖项。 Ivy 在 maven 存储库中查找我用 ant 下载的依赖项,最后一个在 bintray 存储库中,至少在默认情况下不被 ivy 使用。我在我的网络浏览器中访问了这个存储库 (http://dl.bintray.com/typesafe/ivy-releases/com.typesafe.sbtrc/),下载了其中的模块并放入 ~/ivy/local/com.typesafe.sbtrc/.

我再次调用了激活器用户界面,它最终可以 uild 和 运行 我的项目。

再解释一下情况,对于那些有 actor-client-2-10 依赖问题的人来说,当激活器 builds 项目时,它会查看 maven 存储库和本地那些,但不是 bintray 存储库!我所做的只是将在 bintray 中找到的模块复制到我的本地存储库。当激活器查看 ~/.ivy2/local 时,它找到了它想要的工件并将其安装在 ~/.ivy2/cache.

如果你用同样的方法解决了这个问题,请记住创建一些目录,使 bintray 存储库和本地存储库中的目录树相同。

好吧,正如我所承诺的,我将 post 用于下载有问题的依赖项的 ivy build 文件。首先,我们必须下载并安装ant。然后,我们转到任何目录并创建一个名为 build.xml 的文件。在终端中,cd 到该目录并键入 ant。它将下载并安装 build.xml 中定义的依赖项。这个文件的内容应该是

<project name="localrepository" default="install" xmlns:ivy="antlib:org.apache.ivy.ant">
 <target name="install" description="--> install modules to localreporsitory">
  <ivy:install organisation="TYPE HERE ORGANISATION" module="TYPE HERE THE MODULE"
   revision="TYPE HERE THE REVISION" transitive="true" overwrite="true" 
   from="public" to="local" />
 </target>
</project>

因为我第一次用它来

下面以第一个给我出问题的依赖为例。激活器报告依赖项是 org.scala-lang#scala-library;2.10.4。由于它遵循模型组织#module;revision,我们用于安装此依赖项的 build.xml 文件将是

<project name="localrepository" default="install" xmlns:ivy="antlib:org.apache.ivy.ant">
 <target name="install" description="--> install modules to localreporsitory">
  <ivy:install organisation="org.scala-lang" module="scala-library"
   revision="2.10.4" transitive="true" overwrite="true" 
   from="public" to="local" />
 </target>
</project>

我遇到了类似的问题。我删除了 .ivy 和 .maven 下所有名为 "scala-lang*" 的目录,然后重新运行 sbt compile。 sbt下载依赖后,一切顺利

尝试删除缓存文件夹 ~/.ivy2/cache

中的 'org.scala-lang'