Подтвердить что ты не робот

Как использовать sbt с Google App Engine?

Кто-нибудь пытался настроить sbt для работы с Google App Engine? Я мечтаю использовать автоматическую перезагрузку сервера разработки после изменений исходного кода.

4b9b3361

Ответ 1

Для быстрой демонстрации вы можете клонировать или загружать то, что я сделал здесь.

Минимальный sbt-appengine-plugin пример с нуля

Клонировать sbt-appengine-plugin из GitHub

 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"
}

Добавить очень простой сервлет

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 после запуска сервера, но я не получил его работу должным образом.

Ответ 2

Вот sbt-appengine-plugin в Github, который я пытаюсь работать прямо сейчас. Я опубликую любой прогресс.

Ответ 3

Здесь вы найдете пример автора плагина: http://gist.github.com/377611

В частности, в конфигурации плагинов настройка 1.1-SNAPSHOT (упомянутая выше) или 2.1-SNAPSHOT (упомянутая в README sbt-apppengine-plugin) не работает.

В этом примере показано:

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

Кроме того, вместо того, чтобы публиковать плагин sbt-appengine-local, вы можете использовать следующее в 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"  
}

Ответ 5

Я написал пример приложения, описывающего, как настроить среду разработки и создать приложение, использующее SBT и движок приложения. Он также содержит инструкции по настройке JRebel для получения автоматической перезагрузки, о которой вы мечтаете.

См. http://jeremys-scala-example.appspot.com/

Это для SBT 0.7, поэтому он немного устарел.

Ответ 6

Теперь появилась новая версия плагина sbt-appengine, который работает с более новыми версиями SBT (0.10+) на https://github.com/sbt/sbt-appengine. Там также тривиальное примерное приложение, использующее его в https://github.com/sbt/sbt-appengine.

Я просто преобразовал проект, созданный с помощью Eclipse:

  • Переместите scala файлы из src/в src/main/scala.
  • Если у вас есть java файлы, переместите их из src/в src/main/java.
  • Переместить войну/в src/main/webapp.
  • Если у вас есть другие файлы, которые должны быть в WEB-INF/классах, поместите их в src/main/webapp/WEB-INF/classes/.

Ответ 7

Нашел этот пост в поиске Google. Поскольку все приведенные примеры довольно старые, я создал два примера проектов, основанных на том, что я нашел онлайн