Có ai đã cố gắng thiết lập sbt để làm việc với Google App Engine không? Tôi mơ về việc sử dụng máy chủ phát triển tự động tải lại sau khi thay đổi nguồn.Cách sử dụng sbt với Google App Engine?
Trả lời
Để có bản trình diễn nhanh, bạn có thể sao chép hoặc tải xuống những gì tôi đã thực hiện here.
Một Minimalistic sbt-appengine-plugin dụ từ đầu
Clone các SBT-appengine-plugin từ GitHub
cd mystuff
git clone git://github.com/Yasushi/sbt-appengine-plugin.git
cd sbt-appengine-plugin
sbt
Xuất bản plugin cục bộ để bạn có thể sử dụng nó trong các dự án của riêng bạn
publish-local
exit
Tạo một thư mục cho một dự án mới
cd ..
mkdir sbt-appengine-plugin-test
cd sbt-appengine-plugin-test
sbt
Cấu hình dự án mới
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
Hãy nói SBT về các plugin bạn muốn sử dụng
mkdir project/build
mkdir project/plugins
nano project/build/project.scala
dự án. 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"
}
Thêm một servlet rất đơn giản
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")
}
}
Thêm một số file cấu hình hơn
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>
Và cuối cùng chạy SBT và khởi động dự án
sbt
update
dev-appserver-start
Chỏ trình duyệt web của bạn để http://localhost:8080/ và bạn sẽ thấy Hello, world
dev-appserver-stop
Để xem cho thay đổi trong tập tin nguồn tôi đã thử nghiệm một chút với ~ pr epare-webapp sau khi khởi động máy chủ, nhưng tôi chưa nhận được nó hoạt động đúng cách.
Đây là số sbt-appengine-plugin trên Github mà tôi đang cố gắng làm việc ngay bây giờ. Tôi sẽ đăng bất kỳ tiến bộ nào.
Các Yasushi/SBT-appengine-plugin liên kết từ answ này er không còn tồn tại. – Suma
Bạn sẽ tìm thấy một ví dụ bởi tác giả của plugin ở đây: http://gist.github.com/377611
Đặc biệt trong cấu hình plugin, các thiết lập của 1,1-SNAPSHOT (nêu trên) hoặc 2.1-SNAPSHOT (được đề cập trong SBT-apppengine -plugin README) không hoạt động.
Ví dụ cho thấy:
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"
}
Và điều này làm việc cho tôi.
Dưới đây là một dự án mẫu sử dụng SBT + appengine mà có thể được sử dụng để bắt đầu:
https://github.com/mtkopone/sbt-scalatra-appengine-template
Ngoài ra, thay vì phải công bố SBT-appengine-plugin tại địa phương, bạn có thể sử dụng sau đây trong 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"
}
Tôi đã viết một ứng dụng ví dụ mô tả cách thiết lập môi trường phát triển và tạo ứng dụng bằng SBT và công cụ ứng dụng. Nó cũng bao gồm các hướng dẫn về thiết lập JRebel để có được tự động tải lại bạn mơ ước.
Xem http://jeremys-scala-example.appspot.com/
Đó là SBT 0.7 nên nó một chút đã cũ.
Hiện tại, phiên bản mới của plugin sbt-appengine hoạt động với các phiên bản mới hơn của SBT (0.10+) tại https://github.com/sbt/sbt-appengine. Ngoài ra còn có một ứng dụng mẫu tầm thường sử dụng nó tại https://github.com/sbt/sbt-appengine.
Tôi chỉ chuyển đổi một dự án mà đã được tạo ra với Eclipse:
- Move scala tập tin từ src/to src/main/scala.
- Nếu bạn có tệp java, hãy di chuyển chúng từ src/to src/main/java.
- Di chuyển chiến tranh/src/main/webapp.
- Nếu bạn có các tệp khác sẽ kết thúc trong WEB-INF/classes, hãy đặt chúng trong src/main/webapp/WEB-INF/classes /.
Tìm thấy bài đăng này trong tìm kiếm của Google.Vì tất cả các ví dụ được cung cấp là khá cũ Tôi tạo ra hai dự án mẫu dựa trên những gì tôi tìm thấy trực tuyến
mẫu ứng dụng GAE viết bằng Scala sử dụng Scalatra 2.0.5, Scala 2.10.3 và SBT 0,13 https://github.com/cppexpert/scalatra-google-app-engine-app
mẫu GAE ứng dụng viết bằng Scala sử dụng Unfiltered 0.7, Scala 2.10.3 và SBT 0,13 https://github.com/cppexpert/sample-scala-google-app-engine-app
Trong ví dụ servlet, ý của bạn là đặt dấu đô la trên dòng bắt đầu "ghi đè def doGet"? Chắc chắn, đó có nghĩa là để được một khung gần? –
bạn cần phải mở rộng bạn dự án với đặc điểm JRebel để có được xem cho những thay đổi làm việc. – alexguev
Các Yasushi/sbt-appengine-plugin liên kết từ câu trả lời này không còn tồn tại không may. – Suma