如何在Play框架中定义任意任务?(像红宝石耙子)

qer*_*oip 8 rake playframework

如何在Play框架中定义任意任务?

我的意思是从命令行运行任务,类似于ruby rake.

我知道蚂蚁工具,但寻找更好的选择.

Jam*_*per 7

对于Play 2,您可以按照以下文档使用SBT创建新任务:

http://www.scala-sbt.org/release/docs/Detailed-Topics/Tasks

在生成Play 2的上下文中Build.scala,它可能如下所示:

import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build { 

  val appName         = "foo"
  val appVersion      = "1.0-SNAPSHOT"

  val appDependencies = Seq(
    // Add your project dependencies here,
    jdbc,
    anorm
  )

  val hello = TaskKey[Unit]("hello", "Prints 'Hello World'")

  val helloTask = hello := {
    println("Hello World")
  }

  lazy val main = play.Project(appName, appVersion, appDependencies).settings(
    helloTask
  )
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*ano 4

[编辑] 这个答案适用于 Play 1.* 系列!

您应该编写一个自定义模块,然后您的命令进入commands.py文件,参考:http ://www.playframework.org/documentation/1.2.4/releasenotes-1.1#commands

您可以查看现有模块以获得灵感,例如: https: //github.com/sim51/logisima-play-yml/blob/master/commands.py

基本上,您定义所需的命令并从“执行”方法启动它们,例如:

COMMANDS = ['namespace:command']

def execute(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "namespace:command":
        do_something()
Run Code Online (Sandbox Code Playgroud)

如果你想启动 java 的东西 - 经常是这种情况!-:

def do_something():
    java_cmd = app.java_cmd([], None, "play.modules.mymodule.MyClass", args)
        try:
            subprocess.call(java_cmd, env=os.environ)
        except OSError:
            print "Could not execute the java executable, please make sure the JAVA_HOME environment variable is set properly (the java executable should reside at JAVA_HOME/bin/java). "
            sys.exit(-1)
        print
Run Code Online (Sandbox Code Playgroud)

诗。

创建自定义模块非常简单:

play new-module mymodule
Run Code Online (Sandbox Code Playgroud)

这是入门读物: http: //playframework.wordpress.com/2011/02/27/play-modules/,考虑到官方Play!模块文档在这方面非常有限

编辑

我想我应该添加一些信息:

在能够执行命令之前,您必须构建模块。它不像动态编译的其余部分那样运行。

play build-module mymodule
Run Code Online (Sandbox Code Playgroud)

new-module/build-module 期望模块位于项目文件夹的根目录下,但如果有很多,那就会变得一团糟。build-module module-srcs/mymodule工作得很好。