3

不幸的是,我需要 jetty 8 才能正常使用 spray/akka(它是 scala 项目)。
使用 jettyRun 使用的旧版本,我收到如下错误:
java.lang.NoClassDefFoundError: org/eclipse/jetty/continuation/ContinuationListener
是否可以创建一些简单的任务来完成 jettyRun 正在做的工作但使用 jetty 8?

在最坏的情况下,我可以将嵌入式版本的码头与我正在构建的战争一起使用,但如果有的话,我很乐意看到一些更简单的解决方案......

4

3 回答 3

1

Pitor,您为什么不最终从这里添加出色的答案?

我在下面对其进行了调整,以使用 Jetty version 9,依赖于war任务,并使用与 jetty 插件相同的任务名称(即jettyRun)。

configurations {
    jetty
}

dependencies {
    jetty "org.eclipse.jetty:jetty-runner:9.2.11.v20150529"
}

task jettyRun(type: JavaExec, dependsOn: war) {
    main = "org.eclipse.jetty.runner.Runner"
    args = [war.archivePath]
    classpath configurations.jetty
}

用法:

gradle jettyRun
于 2015-06-05T03:15:41.650 回答
0

由于我无法在 gradle 构建级别找到好的解决方案,我决定使用嵌入式码头。这是scala类:

import org.eclipse.jetty.server.Server
import org.eclipse.jetty.webapp.WebAppContext
import org.eclipse.jetty.server.bio.SocketConnector

object JettyServer {

  def main(args: Array[String]) {
    val server = new Server
    val context = new WebAppContext
    val connector = new SocketConnector

    connector.setMaxIdleTime(1000 * 60 * 60)
    connector.setPort(8080)

    context.setServer(server)
    context.setWar(args(0))

    server.setConnectors(Array(connector))
    server.setHandler(context)

    try {
      server.start();
      server.join();
    } catch {
      case e: Exception => e.printStackTrace();
    }
  }
}

然后在 build.gradle 中:

apply plugin: "application"

mainClassName = "com.mycompany.myproject"
run.args = [war.archivePath]
task jettyRun(dependsOn: run)

一切正常:)

于 2011-11-26T19:33:14.923 回答
0

我认为答案有点晚了 :) 但我会将它发布给其他会在谷歌周围搜索相同内容的人。

在尝试使用 gradle 运行 scalatra 应用程序时,我偶然发现了同样的问题。我找到了这个插件,它可以正常工作 - https://github.com/martins1930/jettyMulti

于 2013-04-29T08:32:51.393 回答