使用 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 开发的主要内容,如果未能解决你的问题,请参考以下文章
Maven02_04_使用jetty来跑maven的web项目使用jetty的注意事项没有用Maven的时候是怎么打包的,自定义打包的名字的