Google App Engine에서 SBT를 사용하는 방법은 무엇입니까?
-
18-09-2019 - |
문제
Google App Engine과 함께 SBT를 설정하려고 한 사람이 있습니까? 소스 변경 후 Development Server Auto Reloading을 사용하는 것을 꿈꿉니다.
해결책
빠른 데모를 위해 내가 한 일을 복제하거나 다운로드 할 수 있습니다. 여기.
미니멀리즘 SBT-Appengine-Plugin 처음부터 예
Github에서 SBT-Appengine-Plugin을 복제하십시오
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
플러그인 .cala
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/ 그리고 당신은 안녕하세요, 세상을 볼 수 있습니다
dev-appserver-stop
소스 파일의 변경 사항을 관찰하기 위해 서버를 시작한 후 ~ repay-webapp로 약간 실험했지만 제대로 작동하지 않았습니다.
다른 팁
여기에 있습니다 SBT-Appengine-Plugin Github에서 나는 지금 일을하려고 노력하고 있습니다. 나는 어떤 진전을 게시 할 것입니다.
플러그인의 저자가 여기에서 찾을 수 있습니다.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-Plugin을 로컬로 게시하는 대신 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 (0.10+)와 함께 작동하는 새로운 버전의 SBT-Appengine 플러그인이 있습니다. https://github.com/sbt/sbt-appengine. 이를 사용하는 사소한 샘플 앱도 있습니다. https://github.com/sbt/sbt-appengine.
방금 Eclipse로 만들어진 프로젝트를 변환했습니다.
- SCRC/SRC/Main/Scala로 스칼라 파일을 이동하십시오.
- Java 파일이있는 경우 SRC/SRC/Main/Java로 이동하십시오.
- 전쟁/를 src/main/webapp으로 이동하십시오.
- Web-Inf/Classes에서 끝나야하는 다른 파일이있는 경우 SRC/Main/WebApp/Web-Inf/Classes/에 넣으십시오.
Google 검색 에서이 게시물을 찾았습니다. 제공된 모든 예제는 상당히 오래되었으므로 온라인에서 찾은 내용을 기반으로 두 가지 샘플 프로젝트를 만들었습니다.
스칼라로 작성된 샘플 gae 앱 Scalatra 2.0.5, Scala 2.10.3 및 SBT 0.13https://github.com/cppexpert/scalatra-google-app-engine-app
스칼라로 작성된 샘플 gae 앱 필터링되지 않은 0.7, Scala 2.10.3 및 SBT 0.13https://github.com/cppexpert/sample-scala-google-app-engine-app