Como usar sbt com o Google App Engine?
-
18-09-2019 - |
Pergunta
Alguém tentou sbt configurado para trabalhar com o Google App Engine? Eu sonho com o servidor de desenvolvimento auto-recarregar após as alterações de origem.
Solução
Para uma rápida demonstração você pode clonar ou descarregar o que eu fiz aqui .
A minimalista sbt-appengine plugin de exemplo a partir do zero
Clone do sbt-appengine-plugin a partir GitHub
cd mystuff
git clone git://github.com/Yasushi/sbt-appengine-plugin.git
cd sbt-appengine-plugin
sbt
publicar o plugin localmente de modo que você pode usá-lo em seus próprios projetos
publish-local
exit
Crie um diretório para um novo projeto
cd ..
mkdir sbt-appengine-plugin-test
cd sbt-appengine-plugin-test
sbt
Configurar o novo projeto
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 dizer sobre o plugin que deseja usar
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"
}
Adicionar um servlet muito simples
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")
}
}
Adicionar mais alguns arquivos de configuração
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>
E finalmente executar sbt e iniciar o projeto
sbt
update
dev-appserver-start
apontar seu navegador para http: // localhost: 8080 / e você deve ver Olá, mundo
dev-appserver-stop
Para observar alterações em arquivos de origem Eu experimentei um pouco com ~ preparar-webapp depois de iniciar o servidor, mas eu não ter começado a funcionar correctamente.
Outras dicas
Aqui está um sbt-appengine-plugin no Github que estou tentando começar a trabalhar agora. Vou postar qualquer progresso.
Você vai encontrar um exemplo pelo autor do plugin aqui: http://gist.github.com/377611
Especialmente na configuração de encaixes, a configuração de 1,1-INSTANTÂNEO (mencionado acima) ou 2,1-INSTANTÂNEO (mencionado no README sbt-apppengine-plug-in) não funcionou.
O exemplo mostra:
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"
}
E isso funcionou para mim.
Aqui está um projeto modelo usando sbt + appengine que pode ser usado para começar:
https://github.com/mtkopone/sbt-scalatra-appengine-template
Além disso, em vez de ter de publicar o sbt-appengine do plugin localmente, você pode usar o seguinte em 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"
}
Eu escrevi uma aplicação exemplo que descreve como configurar um ambiente de desenvolvimento e criar um aplicativo usando o SBT e app engine. Ele também inclui instruções sobre como configurar JRebel para obter o auto recarregamento você sonhar.
http://jeremys-scala-example.appspot.com/
É por SBT 0,7 por isso é um pouco fora da data.
Existe agora uma nova versão do sbt-appengine plugin que funciona com as versões mais recentes do SBT (0.10+) em https://github.com/sbt/sbt-appengine . Há também um aplicativo de exemplo trivial de usá-lo em https://github.com/sbt/sbt-appengine.
Eu só converteu um projeto que foi criado com o Eclipse:
- arquivos Mover scala de src / para src / / scala principal.
- Se você tem arquivos Java, movê-los de src / para src / / java principal.
- guerra Move / para src / main / webapp.
- Se você tiver outros arquivos que deve acabar em WEB-INF / classes, colocá-los em src / main / webapp / WEB-INF / classes /.
Encontrado este post na pesquisa do Google. Uma vez que todos exemplos fornecidos são muito antigas Eu criei dois projetos de amostra com base no que eu encontrei on-line
-
aplicativo GAE Amostra escrito em Scala usando Scalatra 2.0.5 , Scala 2.10.3 e SBT 0,13 https://github.com/cppexpert/scalatra-google-app-engine-app
-
Amostra aplicativo GAE escrito em Scala usando Unfiltered 0,7 , Scala 2.10.3 e SBT 0,13 https://github.com/cppexpert/sample-scala-google-app -Engine app