2016-03-31 26 views
3

私は、ルートプロジェクトが単純なSBTプロジェクトであるマルチプロジェクトで、Play Frameworkを使用する方法に関する情報を見つけるのに苦労しています。基本的に、これは私のプロジェクトのレイアウトです:複数のプロジェクトでPlay Frameworkを使用するにはどうすればよいですか?

/
- 共通
- いくつかの-他-プロジェクト
- 私のプレイ-プロジェクト
- - アプリ
- - - コントローラ
- - confの
- - - ルート
- build.sbt

my-play-project/runをSBTコンソールで実行してアプリケーションを起動できますが、ページには、私は500を取得し、このエラーが記録されます。

[error] /someorg/backend/cms/conf/routes: package router does not exist 
[error] /someorg/backend/cms/conf/routes: cannot find symbol 
[error] symbol: class ReversePostController 
[error] location: package controllers 
[error] /someorg/backend/cms/conf/routes: package controllers.javascript does not exist 
[error] /someorg/backend/cms/conf/routes: cannot find symbol 
[error] symbol: class ReversePostController 
[error] location: package controllers 
[error] /someorg/backend/cms/conf/routes: cannot find symbol 
[error] symbol: variable RoutesPrefix 
[error] location: class controllers.routes 
[error] /someorg/backend/cms/conf/routes: package controllers.javascript does not exist 
[error] /someorg/backend/cms/conf/routes: cannot find symbol 
[error] symbol: variable RoutesPrefix 
[error] location: class controllers.routes.javascript 
[error] (cms/compile:compileIncremental) javac returned nonzero exit code 
[info] Compiling 6 Scala sources and 1 Java source to /someorg/backend/cms/target/classes... 
[error] /someorg/backend/cms/conf/routes: package router does not exist 
[error] /someorg/backend/cms/conf/routes: cannot find symbol 
[error] symbol: class ReversePostController 
[error] location: package controllers 
[error] /someorg/backend/cms/conf/routes: package controllers.javascript does not exist 
[error] /someorg/backend/cms/conf/routes: cannot find symbol 
[error] symbol: class ReversePostController 
[error] location: package controllers 
[error] /someorg/backend/cms/conf/routes: cannot find symbol 
[error] symbol: variable RoutesPrefix 
[error] location: class controllers.routes 
[error] /someorg/backend/cms/conf/routes: package controllers.javascript does not exist 
[error] /someorg/backend/cms/conf/routes: cannot find symbol 
[error] symbol: variable RoutesPrefix 
[error] location: class controllers.routes.javascript 
[error] (cms/compile:compileIncremental) javac returned nonzero exit code 
[error] application - 

! @6pi9jna82 - Internal server error, for (GET) [/posts] -> 

play.sbt.PlayExceptions$CompilationException: Compilation error[package router does not exist] 
    at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) 
    at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) 
    at scala.Option.map(Option.scala:145) 
    at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:49) 
    at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:44) 
    at scala.Option.map(Option.scala:145) 
    at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44) 
    at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40) 
    at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) 
    at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) 

は、このプロジェクトを壊す私が行方不明です明白なものはありますか?コントローラは、マニュアルで説明されているように、最も簡単な方法で定義されています。同じことは、私が提供する唯一のルートのために行く:私はフレームワーク2.5.1およびプロジェクトのビルドを再生使用してい

# Route 
GET  /posts  controllers.PostController.list 

// Controller 
package controllers 

import play.api.mvc.{Action, Controller} 

class PostController extends Controller { 
    def list = TODO 
} 

次のように定義されています

lazy val resolvers = ... 

lazy val projectSettings = Seq(
    organization := "some-organization", 
    scalaBinaryVersion := "2.11", 
    scalaVersion := "2.11.7", 
    externalResolvers := resolvers, 
    moduleConfigurations := Seq(), 
    retrieveManaged := true, 
    concurrentRestrictions in Global += Tags.limit(Tags.Test, 1), 
    transitiveClassifiers in Scope.GlobalScope := Seq("sources"), 
    ivyLoggingLevel := UpdateLogging.Quiet, 
    credentials += Credentials(Path.userHome/".ivy2"/".credentials"), 
    crossPaths := false, 
    publishMavenStyle := true, 
    publishArtifact in (Compile, packageDoc) := false, 
    publishArtifact in (Test, packageDoc) := false, 
    javacOptions := Seq("-source", "1.8", "-target", "1.8", "-encoding", "utf8"), 
    javaOptions := Seq("-server", "-XX:ReservedCodeCacheSize=192m", "-Xss2m"), 
    javaOptions in Test := Seq("-server", "-Xmx2g", "-XX:ReservedCodeCacheSize=192m", "-Xss2m"), 
    testFrameworks := Seq(TestFrameworks.ScalaTest, TestFrameworks.Specs2), 
    noTestCompletion(), 
    scalacOptions := Seq(
    "-deprecation", 
    "-optimize", 
    "-unchecked", 
    "-encoding", "utf8", 
    "-target:jvm-1.8", 
    "-Xlog-reflective-calls", 
    "-feature", 
    "-language:_" 
) ++ Seq(
     "by-name-right-associative", 
     "delayedinit-select", 
     "doc-detached", 
     "inaccessible", 
     "missing-interpolator", 
     "nullary-override", 
     "option-implicit", 
     "package-object-classes", 
     "poly-implicit-overload", 
     "private-shadow", 
     "unsound-match" 
    ).map(x => s"-Xlint:$x"), 
    compileOrder := CompileOrder.JavaThenScala, 
    fork in Test := true, 
    testOptions in Test := Seq(Tests.Filter(testName => testName.endsWith("Test") || testName.endsWith("Spec"))), 
    testOptions in Test += Tests.Argument("-oDF"), 
    testOptions in Test <+= (target in Test).map { t => 
    val testDir = t/"test-reports" 
    val maybeJUnitXml = if (flag("sbt.test.nojunitxml")) Seq.empty else Seq("-u", testDir.getAbsolutePath) 
    Tests.Argument(TestFrameworks.ScalaTest, maybeJUnitXml: _*) 
    } 
) 

lazy val cms = (project in file("cms")) 
    .settings(projectSettings) 
    .dependsOn(common, commonTest % "test", model % compileTest) 
    .enablePlugins(PlayScala) 

lazy val root = (project in file(".")) 
    .settings(projectSettings) 
    .aggregate(common, some-other-projects, cms) // TODO: Remove web 
+0

同様のマルチプロジェクトビルドを手に入れることはできませんでした以下の答えを使って作業してください。しかし、 [Marius Soutierのマルチプロジェクトサンプルプロジェクトを再生](https://github.com/mariussoutier/play-multi-multi-project)を詳しく見てみると非常に役に立ちました。 私のケースでは、 'scalaVersion'をすべてのサブプロジェクトに伝播するために' thisBuildでscalaVersionを使うのを忘れてしまいました。 –

答えて

3

更新:

今であなたはbuild.sbtファイルを投稿しました。問題はコンパイル順です。 javacは、上記のパッケージが見つからないため失敗します。

デフォルトのMixedのコンパイル順を使用してください。

私はあなたが my-play-projectサブプロジェクトにSBT-プレイプラグインを有効にしなかったので、あなたのルートファイルが my-play-project/build.sbtmy-play-project/target/scala-2.11/routes/main/router

にコンパイルされていなかった、追加することを疑う


enablePlugins(PlayScala) 
+0

そうではない、私はプラグインを有効にしている。とにかく見たい場合は、ビルドファイルで質問を更新しました。 –

+0

@cbleyが正しいです。コンパイラの順序をJavaThenScalaに設定しても、通常のプレイプロジェクトであっても ".../conf/routes:パッケージルーターは存在しません"というエラーが表示される –

+0

問題はコンパイル順で問題になっていました。回答! –

0

Playプロジェクトのプラグイン宣言を/ project/plugins.sbtのルートプロジェクトに追加してみてください

+0

すでに完了しており、ドキュメントのすべての手順に従っています。 –