没有SBT的Scalatra

时间:2013-11-26 00:32:52

标签: scalatra

我正在尝试开始使用Scalatra,但我遇到了SBT的主要问题。说白了,我讨厌它。它是Maven的Scala等价物。它试图接管您项目的每个方面,以获得一些所谓的好处。此外,它没有很好地与IDE集成。那么有没有一种方法可以在没有SBT的情况下使用Scalatra?我非常喜欢Scalatra提供的东西,但是如果我不能摆脱SBT,我可能不得不解决一些更糟糕的问题,比如用Jetty构建我需要的功能。

1 个答案:

答案 0 :(得分:8)

我应该更清楚一点。但是昨晚几个小时后,我找到了答案。首先,你需要一个像这样(或类似)的主要对象:

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,但我喜欢依赖管理。因此,在某处创建一个测试文件夹,然后在this repo中下载pom.xml文件。然后转到pom.xml所在的文件夹并运行mvn dependency:copy-dependencies。从dependencies文件夹中抓取JAR,你就可以了。没有Maven,没有SBT,没有魔法。像往常一样在IDE中运行和调试。 :)