使用 Jetty 和 Maven 进行 Web 开发

Posted

技术标签:

【中文标题】使用 Jetty 和 Maven 进行 Web 开发【英文标题】:Webdevelopment with Jetty & Maven 【发布时间】:2011-01-30 15:23:15 【问题描述】:

与使用 Visual Studio 相比,我发现使用 Eclipse 使用 Maven 和 Jetty 进行 Web 开发非常令人沮丧。 每次我做出改变,即使是我的视图文件中的微小改变(例如*.jsp),我都必须重新打包整个网络 -> 等待码头重新加载所有内容,然后才能看到更改。

有没有更好的方法来做到这一点,比如自动插件,它会选择更改的文件并将更改的文件部署到 Web 服务器?

【问题讨论】:

我只是偶然发现了这篇文章,我不得不提到这个问题的一个商业解决方案是zeroturnaround.com/jrebel。 【参考方案1】:

没有在 Eclipse 中使用过 Jetty,但是如果您将 Tomcat(我认为 Jetty 也可以)与 WTP 和 m2eclipse 插件一起使用,那么每次保存资源时,Eclipse 都会构建和发布您的 Web 应用程序。

    使用“war”打包创建(或使用现有)Maven 项目。

    在 Eclipse“服务器”视图中,右键单击并设置服务器。

    右键单击配置的服务器,选择“添加/删除项目”,然后选择您的项目。

    单击服务器视图中的绿色三角形以启动服务器。

现在 Eclipse 应该在您每次进行更改时自动构建并发布您的 Web 应用程序。注意,你必须有 m2eclipse 插件和 m2eclipse WTP 集成插件才能工作。

【讨论】:

@Will:在maven项目中,存储在侧pom.xml中的设置将用于启动服务器(端口,例如,通过调用mvn目标)。我想知道你的方式是否可能?【参考方案2】:

您一起使用 Maven、Jetty(和 Eclipse)的方式尚不清楚,但由于问题标记为 Maven,我将介绍 Maven 方式。对于war 类型的项目,启动和运行webapp 的一种简单方法是使用Maven Jetty Plugin。为此,只需将以下 sn-p 添加到您的 POM:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.10</version>
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>

通过此设置,运行mvn jetty:run 将启动一个部署了您的应用程序的码头容器。对视图的任何更改都将导致 JSP 在请求时重新编译。并且要将 jetty 插件配置为也监视 Java 代码更改,您必须添加 scanIntervalSeconds 选项:

scanIntervalSeconds 可选。在扫描 web 应用程序之间以秒为单位的暂停,以检查更改并在检测到任何更改时自动热重新部署。默认为 0,表示禁用热部署扫描。大于 0 的数字启用它。

所以配置可能如下所示:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.10</version>
        <configuration>
          <scanIntervalSeconds>1</scanIntervalSeconds>
        </configuration>
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>

如果您希望能够连接远程调试器,请查看these instructions。

这就是我一直将 Jetty 与 Maven 和 Eclipse 一起使用的方式,而且我一直对这种设置感到满意。我从来没有使用过 WTP 的 Jetty 适配器,以前的设置是无与伦比的。

【讨论】:

嗯,听起来很有趣。实际上,我正在考虑一个单独的插件,它可以重新调用 maven 阶段(如package)以响应文件更改。 scanIntervalSeconds 是一个很酷的选项。但是另一个插件也可以启动不同版本的码头,例如不提供此选项的 Google App Engine(例如 maven-gae-plugin)呢? @Phuong 不幸的是,我对 gae 插件没有任何经验,所以我不能多说。 我找到了这个 FileSync eclipse 插件:andrei.gmxhome.de/filesync/index.html,它可用于将更改的文件复制到已部署的文件夹。我现在正在尝试,看起来很有希望,因为它不依赖于 maven-plugin 可以提供的功能。 我发现 FileSync 非常有用并且对此非常满意。但是,您的解决方案似乎适用于使用 Jetty 和 Maven 进行 Web 开发。我认为它应该是一个答案。谢谢。 @Phuong 很高兴您找到了可行的解决方案。感谢您接受这个答案。

以上是关于使用 Jetty 和 Maven 进行 Web 开发的主要内容,如果未能解决你的问题,请参考以下文章

maven web项目如何用jetty运行

Maven02_04_使用jetty来跑maven的web项目使用jetty的注意事项没有用Maven的时候是怎么打包的,自定义打包的名字的

如何用jetty maven插件运行web项目

Jetty使用教程(四:23)—Jetty开发指南

在eclipse中使用jetty

maven-jetty插件配置时,webdefault.xml的取得和修改