如何在Google App Engine中使用sbt?

时间:2009-08-18 12:20:52

标签: google-app-engine scala sbt

是否有人试图设置sbt以使用Google App Engine?我梦想在源更改后使用开发服务器自动重新加载。

7 个答案:

答案 0 :(得分:21)

要快速演示,您可以克隆或下载我所做的here

从头开始的简约sbt-appengine-plugin示例

从GitHub克隆sbt-appengine-plugin

 cd mystuff
 git clone git://github.com/Yasushi/sbt-appengine-plugin.git
 cd sbt-appengine-plugin
 sbt

在本地发布插件,以便您可以在自己的项目中使用

publish-local
exit

为新项目创建目录

cd ..
mkdir sbt-appengine-plugin-test
cd sbt-appengine-plugin-test
sbt

配置新项目

Project does not exist, create new project? (y/N/s) y
Name: sbt-appengine-plugin-test
Organization: com.example
Version [1.0]: 
Scala version [2.7.7]: 2.8.0.Beta1
sbt version [0.7.3]:
exit

告诉sbt您要使用的插件

mkdir project/build
mkdir project/plugins
nano project/build/project.scala

<强> project.scala

import sbt._

class AppengineTestProject(info: ProjectInfo) extends AppengineProject(info)

nano project/plugins/plugins.scala

<强> plugins.scala

import sbt._

class Plugins(info: ProjectInfo) extends PluginDefinition(info) {
  val a = "net.stbbs.yasushi" % "sbt-appengine-plugin" % "1.1-SNAPSHOT"
}

添加一个非常简单的servlet

mkdir -p src/main/scala/com/example
nano -w src/main/scala/com/example/HelloWorld.scala

HelloWorld.scala

package com.example;

import javax.servlet.http.{HttpServlet, HttpServletRequest, HttpServletResponse}

class HelloWorld extends HttpServlet {
  override def doGet(request: HttpServletRequest, response: HttpServletResponse$
    response.setContentType("text/plain")
    response.getWriter.println("Hello, world")
  }
}

添加更多配置文件

mkdir -p src/main/webapp/WEB-INF
nano -w src/main/WEB-INF/web.xml

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 
   xmlns="http://java.sun.com/xml/ns/javaee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xm$
   version="2.5">
  <display-name>sbt-appengine-plugin usage example</display-name>
      <servlet>
    <servlet-name>helloworld</servlet-name>
    <servlet-class>com.example.HelloWorld</servlet-class>
  </servlet>
      <servlet-mapping>
    <servlet-name>helloworld</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>


nano -w src/main/WEB-INF/appengine-web.xml

appengine-web.xml

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<!-- Replace this with your application id from http://appengine.google.com -$
  <application>hello-world</application>
  <version>1</version>
</appengine-web-app>

最后运行sbt并启动项目

sbt

update
dev-appserver-start

将您的浏览器指向http://localhost:8080/,您应该看到Hello,world

dev-appserver-stop

要观察源文件中的更改,我在启动服务器后使用~prepince-webapp进行了一些实验,但我还没有让它正常工作。

答案 1 :(得分:4)

这是Github上的一个sbt-appengine-plugin,我现在正努力开始工作。我会发布任何进展。

答案 2 :(得分:2)

您可以在此处找到插件作者的示例: http://gist.github.com/377611

特别是在插件配置中,1.1-SNAPSHOT(如上所述)或2.1-SNAPSHOT(在sbt-apppengine-plugin README中提到)的设置不起作用。

示例显示:

import sbt._

class Plugins(info: ProjectInfo) extends PluginDefinition(info) {
    val appenginePlugin = "net.stbbs.yasushi" % "sbt-appengine-plugin" % "2.0" from "http://github.com/downloads/Yasushi/sbt-appengine-plugin/sbt-appengine-plugin-2.0.jar"
}

这对我有用。

答案 3 :(得分:2)

这是一个使用sbt + appengine的模板项目,可以用来开始:

https://github.com/mtkopone/sbt-scalatra-appengine-template

此外,您无需在本地发布sbt-appengine-plugin,而是可以在Plugins.scala中使用以下内容:

import sbt._
class Plugins(info: ProjectInfo) extends PluginDefinition(info) {
  lazy val appEngine = "net.stbbs.yasushi" % "sbt-appengine-plugin" % "2.1" 
    from "http://cloud.github.com/downloads/Yasushi/sbt-appengine-plugin/sbt-appengine-plugin-2.1.jar"  
}

答案 4 :(得分:2)

我编写了一个示例应用程序,描述了如何使用SBT和app引擎设置开发环境并创建应用程序。它还包括有关设置JRebel以获得您梦寐以求的自动重新加载的说明。

请参阅http://jeremys-scala-example.appspot.com/

这是为了SBT 0.7所以它有点过时了。

答案 5 :(得分:2)

现在有一个新版本的sbt-appengine插件可以在https://github.com/sbt/sbt-appengine处使用较新版本的SBT(0.10 +)。还有一个简单的示例应用程序在https://github.com/sbt/sbt-appengine使用它。

我刚刚转换了一个用Eclipse创建的项目:

  • 将scala文件从src /移动到src / main / scala。
  • 如果您有java文件,请将它们从src /移动到src / main / java。
  • 将war /移动到src / main / webapp。
  • 如果您有其他文件应该以WEB-INF / classes结尾,请将它们放在src / main / webapp / WEB-INF / classes /.

答案 6 :(得分:1)

在Google搜索中找到此帖子。由于所有提供的示例都很老,我根据我在网上找到的内容创建了两个示例项目