美好的一天,
我希望能够检测Play应用程序在构建期间将使用的模式。含义我想在Build.scala / build.sbt中执行某些任务,具体取决于应用程序是以DEV还是以PROD模式启动的。
我需要这个的原因是因为我们(团队)通过将Grunt.js添加到playRunHooks中来实现Grunt.js。根据应用程序是否在DEV模式下运行,我们希望启用/禁用某些Grunt任务。
我知道我可以使用Play.isDev等从实际应用程序中检查应用程序模式,是否有类似的机制可用于构建文件?
如果不是,我真的只需要知道开发人员发出的命令(run,start,dist,stage等),但我似乎无法找到直接的方式来了解这一点。
有人能指出我正确的方向吗?提前谢谢!
答案 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命令也运行您的自定义构建命令,在这种情况下,该命令将执行任何已定义的释放任务。
同样,如果您需要一些构建过程来运行测试,请使用dist
和dist 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