在Play Framework 2.x应用程序中构建期间检测应用程序模式(DEV,TEST,PROD)

时间:2014-04-23 19:38:12

标签: java scala playframework sbt playframework-2.2

美好的一天,

我希望能够检测Play应用程序在构建期间将使用的模式。含义我想在Build.scala / build.sbt中执行某些任务,具体取决于应用程序是以DEV还是以PROD模式启动的。

我需要这个的原因是因为我们(团队)通过将Grunt.js添加到playRunHooks中来实现Grunt.js。根据应用程序是否在DEV模式下运行,我们希望启用/禁用某些Grunt任务。

我知道我可以使用Play.isDev等从实际应用程序中检查应用程序模式,是否有类似的机制可用于构建文件?

如果不是,我真的只需要知道开发人员发出的命令(run,start,dist,stage等),但我似乎无法找到直接的方式来了解这一点。

有人能指出我正确的方向吗?提前谢谢!

2 个答案:

答案 0 :(得分:2)

添加到playRunHooks的任何构建任务仅在" play run"上执行。如果你做了#34;玩舞台"或者"播放dist"这些任务永远不会被执行。

答案 1 :(得分:0)

  

我需要这个的原因是因为我们(团队)通过将Grunt.js添加到playRunHooks中来实现Grunt.js。根据应用程序是否在DEV模式下运行,我们希望启用/禁用某些Grunt任务。

由于你说的是构建过程并且正在寻找在prod模式下运行时挂钩的应用程序,我认为你真正想要挂钩的地方是JavaExec命令。在这种情况下,您需要为构建文件创建一些任务,并通过testng.xml进行创作以合并它们。

SBT有一个way of running external processes,你可以在build.sbt文件中定义一个简单的inputKey,如下所示:

dist

然后,要挂钩.dependsOn游戏过程,您可以将其设置为依赖于从上面创建的任务:

val doGulpRelease = inputKey[Unit]("Runs gulp --release")
doGulpRelease := {
    val s = streams.value
    s.log.info("Preparing to run my task")
   "gulp --release" ! s.log
    s.log.info("Done with my task")
}

这将导致您的dist命令也运行您的自定义构建命令,在这种情况下,该命令将执行任何已定义的释放任务。

同样,如果您需要一些构建过程来运行测试,请使用distdist in Universal <<= (dist in Universal).dependsOn(doGulpRelease.toTask("")) 来运行您需要的任何内容。在我看来,你问的是XY problem,但如果你不是,你真的确实需要在你正在运行的播放应用中运行的grunt子进程< / em>然后你需要使用Global Object并挂钩onStart / onShutDown钩子并为自己创建一些类型的job runner。您可以启动here获取有关在游戏中运行后台任务的一些提示,此外谷歌是您的朋友。

注意:你可能需要在build.sbt文件的顶部进行一些导入才能使用上面的代码,它也取决于你的sbt版本,但是用0.13.5我相信它是:

test in Test