如何在 Google App Engine 中使用 sbt?
Posted
技术标签:
【中文标题】如何在 Google App Engine 中使用 sbt?【英文标题】:How to use sbt with Google App Engine? 【发布时间】:2010-11-20 13:53:32 【问题描述】:有没有人尝试设置 sbt 以使用 Google App Engine?我梦想在源更改后使用开发服务器自动重新加载。
【问题讨论】:
【参考方案1】:如需快速演示,您可以克隆或下载我所做的 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
为了观察源文件的变化,我在启动服务器后用 ~prepare-webapp 做了一些试验,但我没有让它正常工作。
【讨论】:
在 servlet 示例中,您的意思是要将美元符号放在以“override def doGet”开头的行上吗?当然,这意味着是一个右括号? 您需要使用 JRebel trait 扩展您的项目,以观察变化是否有效。 不幸的是,从此答案链接的 Yasushi/sbt-appengine-plugin 不再存在。【参考方案2】:这是 Github 上的 sbt-appengine-plugin,我现在正努力开始工作。我会发布任何进展。
【讨论】:
不幸的是,从此答案链接的 Yasushi/sbt-appengine-plugin 不再存在。【参考方案3】:您将在此处找到插件作者的示例: 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"
这对我有用。
【讨论】:
【参考方案4】:这是一个使用 sbt + appengine 的模板项目,可用于入门:
https://github.com/mtkopone/sbt-scalatra-appengine-template
另外,您可以在 Plugins.scala 中使用以下内容,而不必在本地发布 sbt-appengine-plugin:
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"
【讨论】:
【参考方案5】:我编写了一个示例应用程序,描述了如何设置开发环境并使用 SBT 和应用引擎创建应用程序。它还包括有关设置 JRebel 以获得您梦寐以求的自动重新加载的说明。
见http://jeremys-scala-example.appspot.com/
它适用于 SBT 0.7,所以它有点过时了。
【讨论】:
【参考方案6】:现在有一个新版本的 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/ 中。【讨论】:
【参考方案7】:在 Google 搜索中找到此帖子。由于所有提供的示例都很老,我根据我在网上找到的内容创建了两个示例项目
使用 Scalatra 2.0.5、Scala 2.10.3 和 SBT 0.13 以 Scala 编写的示例 GAE 应用程序 https://github.com/cppexpert/scalatra-google-app-engine-app
使用 Unfiltered 0.7、Scala 2.10.3 和 SBT 0.13 以 Scala 编写的示例 GAE 应用程序 https://github.com/cppexpert/sample-scala-google-app-engine-app
【讨论】:
以上是关于如何在 Google App Engine 中使用 sbt?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Google App Engine Python 上的 Django nonrel 中使用查询游标?
如何在 Google App Engine 中执行全文搜索?
人们如何在自己的域中使用 Google App-Engine 应用程序?
如何在 Google App Engine 中包含第三方 Python 库?
如何在 Google Cloud App Engine 上使用 PubSub 创建订阅者,该订阅者通过 Publisher 从 Google Cloud App Engine Flex 收听消息?