Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 如何将sbt与谷歌应用程序引擎结合使用?_Google App Engine_Scala_Sbt - Fatal编程技术网

Google app engine 如何将sbt与谷歌应用程序引擎结合使用?

Google app engine 如何将sbt与谷歌应用程序引擎结合使用?,google-app-engine,scala,sbt,Google App Engine,Scala,Sbt,有人试过将sbt设置为与谷歌应用程序引擎一起工作吗?我梦想在源代码更改后使用development server自动重新加载。这里有一个关于Github的应用程序,我现在正在尝试使用它。我将发布任何进展。要快速演示,您可以克隆或下载我所做的工作 从零开始的极简主义例子 从GitHub克隆sbt appengine插件 cd mystuff git clone git://github.com/Yasushi/sbt-appengine-plugin.git cd sbt-appengine

有人试过将sbt设置为与谷歌应用程序引擎一起工作吗?我梦想在源代码更改后使用development server自动重新加载。

这里有一个关于Github的应用程序,我现在正在尝试使用它。我将发布任何进展。

要快速演示,您可以克隆或下载我所做的工作

从零开始的极简主义例子 从GitHub克隆sbt appengine插件

 cd mystuff
 git clone git://github.com/Yasushi/sbt-appengine-plugin.git
 cd sbt-appengine-plugin
 sbt
在本地发布插件,以便您可以在自己的项目中使用它

publish-local
exit
mkdir -p src/main/webapp/WEB-INF
nano -w src/main/WEB-INF/web.xml
为新项目创建目录

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
mkdir -p src/main/scala/com/example
nano -w src/main/scala/com/example/HelloWorld.scala
sbt

update
dev-appserver-start
配置新项目

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
mkdir -p src/main/scala/com/example
nano -w src/main/scala/com/example/HelloWorld.scala
sbt

update
dev-appserver-start
告诉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
import sbt._

class Plugins(info: ProjectInfo) extends PluginDefinition(info) {
  val a = "net.stbbs.yasushi" % "sbt-appengine-plugin" % "1.1-SNAPSHOT"
}
插件。scala

import sbt._

class AppengineTestProject(info: ProjectInfo) extends AppengineProject(info)

nano project/plugins/plugins.scala
import sbt._

class Plugins(info: ProjectInfo) extends PluginDefinition(info) {
  val a = "net.stbbs.yasushi" % "sbt-appengine-plugin" % "1.1-SNAPSHOT"
}
添加一个非常简单的servlet

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
mkdir -p src/main/scala/com/example
nano -w src/main/scala/com/example/HelloWorld.scala
sbt

update
dev-appserver-start
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")
  }
}
<?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-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>
添加更多配置文件

publish-local
exit
mkdir -p src/main/webapp/WEB-INF
nano -w src/main/WEB-INF/web.xml
web.xml

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")
  }
}
<?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-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>
将浏览器指向,您将看到Hello,world

dev-appserver-stop

为了观察源文件中的更改,我在启动服务器后使用~prepare webapp进行了一些尝试,但没有使其正常工作。

您可以在此处找到插件作者的示例:

特别是在插件配置中,1.1-SNAPSHOT(上面提到)或2.1-SNAPSHOT(在sbt apppengine插件自述中提到)的设置不起作用

示例显示:

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的模板项目,可以用来开始:

此外,不必在本地发布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和AppEngine创建应用程序。它还包括关于设置JRebel以获得您梦想的自动重新加载的说明


它是针对SBT 0.7的,所以有点过时。

现在有一个新版本的SBT appengine插件,它可以与最新版本的SBT(0.10+)一起工作。还有一个简单的示例应用程序正在使用它

我刚刚转换了一个使用Eclipse创建的项目:

  • 将scala文件从src/移动到src/main/scala
  • 如果您有java文件,请将它们从src/移动到src/main/java
  • 将war/移动到src/main/webapp
  • 如果有其他文件应该以WEB-INF/classes结尾,请将它们放在src/main/webapp/WEB-INF/classes/中

    • 在谷歌搜索中找到了这篇文章。由于提供的所有示例都非常旧,我根据在线发现的内容创建了两个示例项目

      • 使用Scala、Scala 2.10.3和SBT 0.13编写的示例GAE应用程序

      • 使用Scala、Scala 2.10.3和SBT 0.13编写的示例GAE应用程序


      在servlet示例中,您的意思是将美元符号放在“override def doGet”开头的行上吗?当然,这意味着一个紧密的括号?您需要使用JRebel特性扩展您的项目,以观察更改是否有效。不幸的是,从此答案链接的Yasushi/sbt appengine插件不再存在。不幸的是,从此答案链接的Yasushi/sbt appengine插件不再存在。