Scala + Eclipse + WebServer =一个Web应用程序

时间:2012-03-26 10:21:21

标签: scala web-applications scala-ide

我想在Scala中开发一个相当简单的Web应用程序,使用Lift或Play框架,使用Eclipse作为环境和一些简单的Web服务器,如Jetty。然而,令我无法形容的惊讶的是,我无法将整个事情安排在一起。我也找不到任何明智而简单明了的指导如何做到这一点。经过半天的搜索,我发现周围的每个人似乎都使用混合的sbt / maven,感觉可以从一个移植到另一个并手动编写项目配置文件,只是为了得到一个简单的空白项目。

创建一个空项目并不简单。使用Java我记得只需点击几下 - 将Web服务器集成到Eclipse中,创建一个简单的Web应用程序项目并从那里运行它。在这种情况下,Scala的强大功能和简洁性在哪里?只有当我想试试Lift时才会这样。如果我还想尝试Play,如果我再次走同样的道路怎么办?

是否有一个简单而完整的指南介绍了如何设置环境以便可以立即开始开发应用程序?

更新:由于Peter Gwiazda的建议,我已经与Eclipse成功实现了Play项目集成,并具有Play开箱即用的所有功能。我正在使用此设置进行开发。但是,我感兴趣的问题仍然存在:与其他框架(如Lift,Scalatra等)实现类似功能的其他方法是什么?

5 个答案:

答案 0 :(得分:8)

使用Playframework 2.0非常简单。只需按照教程 http://www.playframework.org/documentation/2.0/ScalaTodoList

使用Play,您不需要任何其他内容 - Play已包含服务器。

恕我直言,Play比使用Lift更容易使用。

答案 1 :(得分:6)

修改
好的,你问了它;-)

这是Scalatra的前沿设置,带有SBT Coffeescript& LESS(请参阅HERE了解SBT-Eclipse依赖关系管理)

1)使测试项目黯然失色

2)在项目根目录中创建“build.sbt”文件:

import AssemblyKeys._
import Keys._

name := "your project name"

version := "1.0"

scalaVersion := "2.9.1"

fork in run := true 

resolvers ++= Seq(
  "Sonatype OSS Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/",
  "Typesafe repository" at "http://typesafe.artifactoryonline.com/typesafe/ivy-releases/"
) 

seq(webSettings :_*)

seq(assemblySettings: _*)

seq(coffeeSettings: _*)

seq(lessSettings:_*)

(LessKeys.mini in (Compile, LessKeys.less)) := false

libraryDependencies ++= Seq(
  "org.scalatra"    %% "scalatra"   % "2.1.0-SNAPSHOT",
  "org.scalatra"    %% "scalatra-scalate"   % "2.1.0-SNAPSHOT",
  "org.scalatra"    %% "scalatra-lift-json"     % "2.1.0-SNAPSHOT",
  "org.scalatra"    %% "scalatra-anti-xml"  % "2.1.0-SNAPSHOT",
  "org.scalatra"    %% "scalatra-fileupload"    % "2.1.0-SNAPSHOT",
  "org.eclipse.jetty" % "jetty-webapp" % "8.1.0.RC2" % "test;container;provided",
  "javax.servlet"   % "javax.servlet-api" % "3.0.1" % "provided"
)

unmanagedBase <<= baseDirectory { base => base / "/src/main/webapp/WEB-INF/lib/" }

3)使用plugins.sbt文件在root中创建文件夹“project”:

libraryDependencies <+= sbtVersion(v => "com.github.siasia" %% "xsbt-web-plugin" % (v+"-0.2.10"))

resolvers += Resolver.url("sbt-plugin-releases", new URL("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases/"))(Resolver.ivyStylePatterns)

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.0.0-M3")

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.7.2")

addSbtPlugin("me.lessis" % "coffeescripted-sbt" % "0.2.2")

addSbtPlugin("me.lessis" % "less-sbt" % "0.1.9")

4)从终端/命令提示符启动sbt&amp;启用代码重新加载:

# sbt
> ~;container:start;container:reload /

打开Scalatra Book并开始黑客攻击; - )

<强> ORIGINAL
不得不提一下,但Scalatra,Spray或Unfiltered的微框架也可能会引起人们的兴趣。

也就是说,如果你不是在寻找Lift and Play提供的厨房水槽;如果你 正在寻找厨房水槽并希望快速推进,那么Play 2.0确实看起来很不错。

答案 2 :(得分:4)

免责声明:我是Vaadin团队的成员。

你也可以尝试使用与Scala完美配合的Vaadin,HOWTO here。如果需要,您还可以使用Maven或SBT。您还应该查看Scaladin,Vaadin的半官方Scala包装器。

Vaadin是一个基于组件的库(只有一个没有依赖项的JAR),它允许您在纯Scala中创建启用Ajax和HTML5的UI,而无需任何HTML模板,RPC,XML或JavaScript。

答案 3 :(得分:2)

您可以将我的Maven原型用于Scalatra,然后只需将maven项目导入Eclipse。相当不错,你不会被迫使用SBT。

https://github.com/fancellu/scalatra-maven-prototype

答案 4 :(得分:1)

您可以查看我的Github仓库,其中我有一个使用Lift和Jetty的项目(作为嵌入式服务器)。它还没有很好的记录,但足够小,可以掌握它是如何工作的

P4G Server Repo

服务器从com.p4g.Server对象启动(在com.p4g.Main Application对象中调用)

My Lift boostrap对象位于boostrap.liftweb包中

BTW,我也在使用ScalaQuery和ScalaZ