Cómo utilizar SBT con Google App Engine?
-
18-09-2019 - |
Pregunta
¿Alguien ha tratado de SBT configuración para trabajar con Google App Engine? Sueño con el uso de servidor de desarrollo de auto-recarga después de los cambios de código.
Solución
Para una demostración rápida puede clonar o descargar lo que he hecho aquí .
A SBT-appengine-plugin ejemplo desde cero
Clonar la SBT-appengine-plugin de GitHub
cd mystuff
git clone git://github.com/Yasushi/sbt-appengine-plugin.git
cd sbt-appengine-plugin
sbt
Publicar el plugin de forma local para que pueda utilizarlo en sus propios proyectos
publish-local
exit
Crear un directorio para un nuevo proyecto
cd ..
mkdir sbt-appengine-plugin-test
cd sbt-appengine-plugin-test
sbt
Configurar el nuevo proyecto
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
Dile sbt sobre el plugin que desea utilizar
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"
}
Añadir un servlet muy simple
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")
}
}
Añadir algunos archivos de configuración más
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>
Y por último ejecutar SBT e iniciar el proyecto
sbt
update
dev-appserver-start
Punto de su navegador para http: // localhost: 8080 / y debería ver Hola, mundo
dev-appserver-stop
Para observar los cambios en los archivos de origen que he experimentado un poco con ~ prepare-webapp después de iniciar el servidor, pero no he conseguido que funcione correctamente.
Otros consejos
Encontrará un ejemplo por el autor del plugin aquí: http://gist.github.com/377611
Especialmente en la configuración plugins, el ajuste de 1,1-SNAPSHOT (mencionado anteriormente) o 2,1-SNAPSHOT (mencionado en el README SBT-apppengine-plugin) no funcionaba.
El ejemplo muestra:
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"
}
Y esto funcionó para mí.
Aquí hay un proyecto de plantilla mediante SBT + appengine que se puede utilizar para empezar:
https://github.com/mtkopone/sbt-scalatra-appengine-template
Además, en lugar de tener que publicar el SBT-appengine-plugin localmente, puede utilizar lo siguiente en 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"
}
escribí una aplicación de ejemplo que describe cómo configurar un entorno de desarrollo y crear una aplicación que utiliza SBT y motor de aplicación. También incluye instrucciones sobre cómo configurar JRebel para obtener el auto recarga que sueñas.
http://jeremys-scala-example.appspot.com/
Es por SBT 0.7 así que es un poco fuera de fecha.
Ahora hay una nueva versión del plugin SBT-appengine que trabaja con las nuevas versiones de SBT (0.10+) a https://github.com/sbt/sbt-appengine . También hay una aplicación de ejemplo trivial de usarlo en https://github.com/sbt/sbt-appengine.
Acabo de convertir un proyecto creado con Eclipse:
- Mover archivos Scala de src / a src / main / Scala.
- Si tiene archivos de Java, moverlos de src / src / main / java.
- Mover guerra / a src / main / webapp.
- Si usted tiene otros archivos que debe terminar en WEB-INF / classes, los puso en src / main / webapp / WEB-INF / classes /.
Se han encontrado este blog en la búsqueda de Google. Dado que todos los ejemplos proporcionados son bastante antiguos creé dos proyectos de la muestra en base a lo que he encontrado en Internet
-
Muestra GAE aplicación escrito en Scala usando Scalatra 2.0.5 , Scala 2.10.3 y SBT 0.13 https://github.com/cppexpert/scalatra-google-app-engine-app
-
Muestra GAE aplicación escrito en Scala usando href="http://unfiltered.databinder.net/Unfiltered.html" sin filtrar 0,7 , Scala 2.10.3 y SBT 0,13 https://github.com/cppexpert/sample-scala-google-app -motor aplicación