在Eclipse中运行Jetty 7服务器?

14

我正在尝试设置Eclipse以使其能够运行并部署我的项目到Jetty 7服务器(从http://download.eclipse.org/jetty/下载的最旧版本)。我已经下载了Jetty 7并解压缩了它,并从可用的服务器适配器列表中安装了Jetty插件,但是当我尝试配置一个新的Jetty服务器时,服务器类型列表只包含"Jetty 6"。如果我使用这个并将其指向我的服务器运行时,当我尝试启动它时,会出现以下错误:

java.lang.NoClassDefFoundError: org/mortbay/start/Main
Caused by: java.lang.ClassNotFoundException: org.mortbay.start.Main
 at java.net.URLClassLoader$1.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Exception in thread "main"

我猜我需要一个不同的适配器来启动Jetty 7,但我不知道在哪里找到它。

5个回答

22

我更喜欢使用嵌入式 Jetty 而不是使用 WTP 适配器。我创建一个普通的 Java 项目,称之为 "embedded-jetty"。在项目属性的“Java Build Path”部分中,我将原始 Web 应用程序项目设为此项目的要求。然后,我创建了一个类来启动 Jetty 实例,如下所示:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

public class JettyServer {
 public static void main(String[] args) {
  Server server = new Server(8080);

  WebAppContext context = new WebAppContext();
  context.setResourceBase("../webapp-project/WebContent");
  context.setDescriptor("../webapp-project/WebContent/WEB-INF/web.xml");
  context.setContextPath("/");
  context.setParentLoaderPriority(true);
  server.setHandler(context);

  try {
   server.start();
   server.join();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

在embedded-jetty项目中,我创建了一个"lib"文件夹,并从jetty/lib文件夹中复制所有库文件,然后将这些库文件添加到项目属性的Libraries中。

对于我来说,运行和调试嵌入式Jetty非常好用,JSP和类的重新加载也像魔术一样运作良好。


有趣的想法。我曾经做过类似的事情,但最终我的Web应用程序依赖于Jetty,这是我想避免的。不过你的方法似乎没有这个问题。谢谢。 - user264636
你也可以将这个应用程序放在测试文件夹中,这样它就对每个人都可用,但不会被包含在实际的jar文件中。 - kubek2k

22

我刚刚点击了你的链接,它显示更新信息:「Jetty 9已经取消支持此功能。如果您认为应该恢复此功能,请提交错误报告。」 - skomisa
看起来新的“官方”方式是在独立的Jetty服务器上部署并使用远程调试:http://www.eclipse.org/jetty/documentation/current/debugging-with-eclipse.html - Thomas Broyer

2
问题在于迁移到Eclipse时包名已更改,Jetty的开发团队仍在忙碌中。
最简单的选择是从Codehaus下载Jetty 6(http://dist.codehaus.org/jetty/),将其解压到某个位置,并使用Jetty 6适配器。

4
有点讽刺的是,Jetty 成为 Eclipse 官方项目后,使用 Jetty 和 Eclipse 结合变得更加困难了,但事实似乎确实如此。嗯,看来只能回到 v6 了。:( - user264636
新的适配器是哪个版本,你从哪里拿到的?我有 org.mortbay.jetty.serveradaptor_1.0.4(使用“下载其他服务器适配器”安装的,也可在http://www.webtide.com/eclipse/上获取)。使用该适配器,Eclipse只提供我“Jetty 6”运行时类型,如果我尝试将其与Jetty 7一起使用,则会得到与上面问题中相同的异常。 - Chris Lercher
@Chris,好久不见了。我相信我是从Eclipse市场下载的。 - Thorbjørn Ravn Andersen
3
我刚刚找到了它:我按照@Thomas Broyer在下面的答案中提供的链接。我以前见过那个网站,但链接指向http://download.eclipse.org/jetty/updates/jetty-wtp ,不幸的是这个链接是“404文件未找到”。但是,我刚刚发现开发版本仍然在http://download.eclipse.org/jetty/updates/jetty-wtp/development/中。 (请注意,“org.eclipse.jst.server.jetty.feature_1.0.0”包含Jetty 7/8适配器,而“org.mortbay.jetty.serveradaptor_1.0.4”则没有!)也许有人知道该插件稳定版本的更新链接? - Chris Lercher
我刚刚花了几个小时尝试从jetty-6移动到更高版本的eclipse托管版本(7或8)。缺少部分,缺少文档,“只需下载和mvn安装!”,可用下载缺少pom.xml文件,损坏的maven安装程序,缺少文档,损坏的链接,“通过eclipse下载!”。似乎已经有一个良好支持的生态系统来下载和安装项目,这是毫无必要、毫无意义的复杂化,正如所有问题/回答所证明的那样,对于不需要复杂化的东西。 - Steve B.

1

0

你可以使用Jetty Maven插件非常容易地在Eclipse中配置Jetty服务器。在你的pom.xml文件中包含以下元素:

<jetty.version>9.3.0.M1</jetty.version>

<!-- JETTY DEPENDENCIES -->
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-server</artifactId>
  <version>${jetty.version}</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-servlet</artifactId>
  <version>${jetty.version}</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-webapp</artifactId>
  <version>${jetty.version}</version>
  <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-servlets</artifactId>
    <version>${jetty.version}</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-ant</artifactId>
    <version>${jetty.version}</version>
</dependency>

并且在你的pom文件的插件管理中,

<plugin>
       <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${jetty.version}</version>
       <configuration>
           <stopKey>keyStop</stopKey>
           <stopPort>8181</stopPort>
           <httpConnector>
                 <host>0.0.0.0</host>   //also localhost or IP address
                 <port>8080</port>
           </httpConnector>
       </configuration>
</plugin>

或者您可以将服务器配置分离到单独的jetty-.xml文件中。请参见配置Jetty容器了解更多信息。

现在右键单击您的Maven项目并运行目标,

mvn jetty:run

要在默认端口8080上启动服务器。停止服务器的方法是,

mvn jetty:stop

如果未指定,Jetty 将创建一个 ServerConnector 实例侦听端口8080。 您可以通过使用命令行上的系统属性jetty.http.port更改此默认端口号 例如:mvn -Djetty.http.port=9999 jetty:run。 请注意,自 Jetty-9.0 以来,不再可以直接在 pom.xml 中配置 https 连接器: 需要使用 Jetty XML 配置文件进行配置。
在 Jetty 网站上阅读有关更多目标和配置的信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接