我试图从Scalatra开始,但我遇到了SBT的主要问题。坦率地说,我讨厌它。这是相当于Maven的Scala。它试图接管项目的每一个方面,以获得一些假定的好处。另外,它和IDE没有很好的结合。那么,在没有SBT的情况下,有没有办法与Scalatra一起工作呢?我真的很喜欢Scalatra提供的东西,但是如果我不能摆脱SBT,我可能不得不用一些更简单的东西来解决问题,比如用Jetty构建我需要的特性。
发布于 2013-11-26 14:24:40
我应该说得更清楚一点。但昨晚几个小时后,我找到了答案。首先,您需要这样的主对象(或类似对象):
object Sandbox {
def main(args: Array[String]) {
val server = new Server(3000)
val context = new WebAppContext()
context.setServer(server)
context.setContextPath("/")
context.setWar("webapp")
server.setHandler(context)
try {
server.start()
server.join()
} catch {
case e: Exception =>
e.printStackTrace()
System.exit(-1)
}
}
}然后您将需要一个servlet:
class Test extends ScalatraServlet with ScalateSupport {
get("/") {
<html>
<body>
Hello World
</body>
</html>
}
}在默认包中还需要一个ScalatraBootstrap类(必须命名为ScalatraBootstrap.scala )
class ScalatraBootstrap extends LifeCycle {
override def init(context: ServletContext) {
context.mount(new Test, "/test/*")
}
}就快完成了。您需要一个单一的XML文件。创建一个webapp/WEB-INF文件夹并将这个web.xml文件放入其中。
<?xml version="1.0" encoding="UTF-8"?>
<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/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<listener>
<listener-class>org.scalatra.servlet.ScalatraListener</listener-class>
</listener>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/img/*</url-pattern>
<url-pattern>/css/*</url-pattern>
<url-pattern>/js/*</url-pattern>
<url-pattern>/assets/*</url-pattern>
</servlet-mapping>
</web-app>最后,您需要JAR文件。有一个相当长的列表,但有一个相当简单的方法来获得它们。我讨厌Maven,但我喜欢依赖性管理。因此,在某个地方创建一个测试文件夹并在这 repo中下载这文件。然后转到pom.xml所在的文件夹并运行mvn dependency:copy-dependencies。从dependencies文件夹中拿出罐子,你就可以走了。没有Maven,没有SBT,没有魔法。像往常一样在IDE中运行和调试。:)
https://stackoverflow.com/questions/20206356
复制相似问题