Кто-нибудь пытался настроить sbt для работы с Google App Engine? Я мечтаю использовать автоматическую перезагрузку сервера разработки после изменений исходного кода.Как использовать sbt с Google App Engine?
ответ
Для быстрой демонстрации вы можете клонировать или загружать то, что я сделал here.
Минималистичный sbt-appengine-plugin пример с нуля
Clone СБТ-AppEngine-плагин от 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
проект. 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-веб.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/ и вы должны увидеть Привет, мир
dev-appserver-stop
Чтобы смотреть изменения в исходных файлах Я немного экспериментировал с ~ pr epare-webapp после запуска сервера, но я не получил работу должным образом.
Здесь sbt-appengine-plugin на Github, что я пытаюсь работать прямо сейчас. Я опубликую любой прогресс.
The Ясуси/SBT-Appengine-плагин, связанный с этой ANSW к сожалению, не существует. – Suma
Вы найдете пример автора плагина здесь: 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"
}
И это работало для меня.
Вот шаблон проекта с использованием SBT + AppEngine, который может быть использован для начала работы:
https://github.com/mtkopone/sbt-scalatra-appengine-template
Кроме того, вместо того, чтобы опубликовать SBT-Appengine-плагин локально, вы можете использовать следующее 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"
}
Я написал пример приложения, описывающий, как настроить среду разработки и создания приложения с использованием SBT и App Engine. Он также содержит инструкции по настройке JRebel для получения автоматической перезагрузки, о которой вы мечтаете.
См http://jeremys-scala-example.appspot.com/
Это для SBT 0,7 поэтому его немного устареть.
В настоящее время существует новая версия плагина sbt-appengine, которая работает с более новыми версиями SBT (0.10+) в https://github.com/sbt/sbt-appengine. Также есть тривиальное примерное приложение, использующее его по адресу https://github.com/sbt/sbt-appengine.
я просто переделал проект, который был создан с помощью Eclipse:
- Переместить файлы из Scala SRC/в SRC/основной/Скале.
- Если у вас есть Java-файлы, переместите их из src/в src/main/java.
- Перемещение войны/в src/main/webapp.
- Если у вас есть другие файлы, которые должны быть в WEB-INF/classes, поместите их в src/main/webapp/WEB-INF/classes /.
Нашли это сообщение в поиске Google.Поскольку все представленные примеры довольно старые, я создал два примера проектов на основе того, что я нашел в Интернете
Пример GAE приложения, написанные на Scala, используя Scalatra 2.0.5, Scala 2.10.3 и SBT 0,13 https://github.com/cppexpert/scalatra-google-app-engine-app
Образец GAE приложение написано в Scala, используя Unfiltered 0.7, Scala 2.10.3 и SBT 0,13 https://github.com/cppexpert/sample-scala-google-app-engine-app
В примере с сервлетами вы хотели поставить знак доллара на строку, которая начинает «переопределять def doGet»? Наверняка, это значит, что это тесная скобка? –
вам нужно расширить проект с помощью свойства JRebel, чтобы посмотреть, как работают изменения. – alexguev
Ясуси/sbt-appengine-plugin, связанный с этим ответом, больше не существует. – Suma