prices - ¿Cómo usar sbt con Google App Engine?
google cloud app engine prices (7)
¿Alguien ha intentado configurar sbt para que funcione con Google App Engine? Sueño con usar la recarga automática del servidor de desarrollo después de los cambios de origen.
Ahora hay una nueva versión del complemento sbt-appengine que funciona con las nuevas versiones de SBT (0.10+) en https://github.com/sbt/sbt-appengine . También hay una aplicación de muestra trivial que la usa en https://github.com/sbt/sbt-appengine .
Acabo de convertir un proyecto que fue creado con Eclipse:
- Mueva los archivos de scala de src / a src / main / scala.
- Si tiene archivos java, muévalos de src / a src / main / java.
- Mueve war / a src / main / webapp.
- Si tiene otros archivos que deberían terminar en WEB-INF / classes, póngalos en src / main / webapp / WEB-INF / classes /.
Aquí hay un sbt-appengine-plugin en Github que estoy tratando de poner a trabajar ahora mismo. Voy a publicar cualquier progreso.
Aquí hay un proyecto de plantilla que usa sbt + appengine que puede usarse para comenzar:
https://github.com/mtkopone/sbt-scalatra-appengine-template
Además, en lugar de tener que publicar el complemento sbt-appengine localmente, puedes usar 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"
}
Encontré esta publicación en la búsqueda de Google. Como todos los ejemplos proporcionados son bastante antiguos, creé dos proyectos de ejemplo basados en lo que encontré en línea
Ejemplo de aplicación GAE escrita en Scala con Scalatra 2.0.5 , Scala 2.10.3 y SBT 0.13 https://github.com/cppexpert/scalatra-google-app-engine-app
Ejemplo de aplicación GAE escrita en Scala con Unfiltered 0.7 , Scala 2.10.3 y SBT 0.13 https://github.com/cppexpert/sample-scala-google-app-engine-app
Encontrará un ejemplo del autor del complemento aquí: http://gist.github.com/377611
Especialmente en la configuración de complementos, la configuración de 1.1-SNAPSHOT (mencionada anteriormente) o 2.1-SNAPSHOT (mencionada en el archivo README de sbt-apppengine-plugin) no funcionó.
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í.
Escribí una aplicación de ejemplo que describe cómo configurar un entorno de desarrollo y crear una aplicación utilizando SBT y el motor de la aplicación. También incluye instrucciones sobre cómo configurar JRebel para obtener la recarga automática que soñaste.
Consulte http://jeremys-scala-example.appspot.com/
Es para SBT 0.7 por lo que es un poco fuera de fecha.
Para una demostración rápida, puede clonar o descargar lo que he hecho here .
Un sbt-appengine-plugin minimalista de sbt-appengine-plugin desde cero
Clona el complemento sbt-appengine de GitHub
cd mystuff
git clone git://github.com/Yasushi/sbt-appengine-plugin.git
cd sbt-appengine-plugin
sbt
Publique el complemento localmente para que pueda usarlo 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
Cuéntale a sbt sobre el plugin que quieres usar
mkdir project/build
mkdir project/plugins
nano project/build/project.scala
proyecto.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"
}
Agrega 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 finalmente ejecuta sbt y comienza el proyecto.
sbt
update
dev-appserver-start
Dirija su navegador a http://localhost:8080/ y debería ver Hello, world
dev-appserver-stop
Para observar los cambios en los archivos de origen, he experimentado un poco con ~ prepare-webapp después de iniciar el servidor, pero no lo he hecho funcionar correctamente.