Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

deploy your webapp to appengine using sbt.

branch: master

This branch is 0 commits ahead and 0 commits behind master


latest commit bb5205cb23
eugene yokota eed3si9n authored March 18, 2014
Octocat-spinner-32 notes 0.6.1 February 05, 2014
Octocat-spinner-32 project 0.6.1 February 05, 2014
Octocat-spinner-32 src ls February 05, 2014
Octocat-spinner-32 .gitignore first commit July 31, 2009
Octocat-spinner-32 LICENSE license December 11, 2011
Octocat-spinner-32 0.6.0 August 11, 2013
Octocat-spinner-32 build.sbt publishTo March 18, 2014
Octocat-spinner-32 crossbuilding.sbt 0.6.1 February 05, 2014
Octocat-spinner-32 ls.sbt 0.6.1 February 05, 2014

sbt-appengine is a sbt 0.10+ port of the awesome Yasushi/sbt-appengine-plugin.


export environment variables (JREBEL_PATH is optional).

export APPENGINE_SDK_HOME=/Applications/appengine-java-sdk-
export JREBEL_PATH=/Applications/ZeroTurnaround/JRebel/jrebel.jar

setup for sbt 0.13

put the following in the project/appengine.sbt:

addSbtPlugin("com.eed3si9n" % "sbt-appengine" % "0.6.0")

and the following in appengine.sbt:

libraryDependencies += "org.mortbay.jetty" % "jetty" % "6.1.22" % "container"


setup for sbt 0.12

put the following in the project/plugins.sbt:

addSbtPlugin("com.eed3si9n" % "sbt-appengine" % "0.5.0")

resolvers += "spray repo" at ""

for build.sbt:

libraryDependencies += "org.eclipse.jetty" % "jetty-webapp" % "7.6.8.v20121106" % "container"


for build.scala:

import sbtappengine.Plugin._
import AppengineKeys._

lazy val example = Project("web", file("web"),
  settings = buildSettings ++ appengineSettings ++
             Seq( // your settings here



you can deploy your application like this:

> appengineDeploy

development server

to (re)start the development server in the background:

> appengineDevServer

to redeploy development server continuously:

> ~ appengineDevServer

hot loading!

to hot reload development server continuously, set JREBEL_PATH and:

> appengineDevServer
> ~ packageWar

by default development server runs in debug mode. IDE can connect to it via port 1044.

appengineDevServer lifecyle hooks

to run a code on start/stop of dev server:

(gae.onStartHooks in gae.devServer in Compile) += { () =>

(gae.onStopHooks in gae.devServer in Compile) += { () =>

backend support

you can deploy your backend application(s) like this:

> appengineDeployBackends

to start a backend instance in the cloud:

> appengineStartBackend <backend-name>

to stop a backend instance:

> appengineStopBackend <backend-name>

DataNucleous enhancer support (experimental)

sbt-appengine provides experimental support for DataNucleous enhancer. to use this, include the following in build.sbt:



gae.persistenceApi in gae.enhance in Compile := "JDO"

this will call the enhancer automatically on packageWar task. since DataNucleous expects plain Java fields, the entity class looks a bit ugly in Scala:

import javax.jdo.annotations._

case class Counter(
  @(PrimaryKey @field)
  @(Persistent @field)(valueStrategy = IdGeneratorStrategy.IDENTITY)
  var key: Key,
  @(Persistent @field)
  var count: Int)



When trying to launch the dev server with appengine-dev-server, you might run into the following exception: java.lang.RuntimeException: Unable to restore the previous TimeZone. This issue has been resolved in the latest App Engine SDK.

Something went wrong with that request. Please try again.