摘要: 之前写了Eclipse下怎么通过 Maven 的 Tomcat 插件来运行 Web 工程。近日听说 Jetty 可以动态加载修改后的类, 为了能够更快提高开发效率, 绝对要尝试一下。

引用来源

Jetty7/8 的Maven插件配置:http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin

Jetty9 最新的Maven插件配置:http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html 或者 最新RELEASE版配置

Jetty 各个版本的限制:http://wiki.eclipse.org/Jetty/Starting/Jetty_Version_Comparison_Table

Jetty 7 必须 Jdk 1.5+,Servlet 2.5,类似于 Tomcat 6,文章编写时的 Release 版本:

<plugin><groupId>org.mortbay.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>7.6.17.v20150415</version>
</plugin>

Jetty 8 必须 Jdk 1.6+,Servlet 3.0,类似于 Tomcat 7,文章编写时的 Release 版本:

<plugin><groupId>org.mortbay.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>8.1.16.v20140903</version>
</plugin>

Jetty 9 必须 Jdk 1.7+,Servlet 3.0+,类似于 Tomcat 8,文章编写时的 Release 版本:

<plugin><groupId>org.eclipse.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>9.2.10.v20150310</version>
</plugin>

国内很多应用也许会去升级JDK版本,但往往还在使用Servlet2.5做开发,所以本文使用 Jetty 8 作为案例。

单独使用HTTP

步骤一

在项目的 pom.xml 里面添加如下配置:

<project>....<build>....<plugins><plugin><groupId>org.mortbay.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>8.1.16.v20140903</version><configuration><scanIntervalSeconds>5</scanIntervalSeconds><webApp><contextPath>/test</contextPath></webApp></configuration></plugin></plugins>....</build>....
</project>

配置说明:

  • configuration.scanIntervalSeconds 配置表示新代码的扫描时间间隔(秒),值 <= 0 表示不扫描

  • configuration.webApp.contextPath 配置表示工程的虚拟目录名

步骤二

使用Eclipse的Maven Build运行,Goals配置,如图:

这个配置表示 jetty 运行时的端口号。

jetty:run -Djetty.port=9080

另外,截图的绿色部分是因为我的Web应用的 log4j.xml 中使用了 ${sys:catalina.base} 这个Tomcat的环境变量,在启动 Jetty 时会报错,添加了 catalina.base 这个配置后就可以解决这个问题了。还有一个问题是,这个配置必须配置到 Parameter 中,成为启动参数。

以上方案配置完成之后,第一次运行时,Maven会自动去下载插件依赖,编译并运行Web应用,成功之后就可以愉快的通过HTTP的形式访问亲的网站了。

混合使用HTTP和HTTPS

步骤一

pom.xml 里面的配置改为如下:

<project>....<build>....<plugins><plugin><groupId>org.mortbay.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>8.1.16.v20140903</version><configuration><scanIntervalSeconds>5</scanIntervalSeconds><webApp><contextPath>/test</contextPath></webApp><connectors><connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"><port>9080</port></connector><connector implementation="org.eclipse.jetty.server.ssl.SslSelectChannelConnector"><port>9443</port><password>changeit</password></connector></connectors></configuration></plugin></plugins>....</build>....
</project>

说明,从配置中可以看出,添加了connectors配置,一个是http的配置,一个是https的配置。

connector.port 是端口号,这个端口号必须设置,且优先级比 -Djetty.port 高。

connector.password 是 .keystore 的密码,https 连接必须设置,当前使用了 Tomcat 一样的密钥 changeit。

.keystore 文件的创建方法请查看上一篇博客 Eclipse下通过Maven的Tomcat插件运行Web工程的配置,包括启用https

步骤二

跟 单独使用HTTP的步骤二 相似,但可以去掉 -Djetty.port=9080 这个配置。

以上配置完成后,运行,亲就可以通过 http 和 https 两种形式访问亲的网站了。

总结

Jetty 的定时重载代码的实现比 Tomcat 的好很多,使用 Tomcat 的 onreload 经常修改几下就整个应用在重启,而且经常排队,非常耗时。

Jetty 的配置对 pom.xml 的侵入比较大,尤其是 http 和 https 的混合配置更是需要在 pom.xml 中配置固定的端口号,让代码看起来不够干净。

我对 Jetty 的尝试还非常粗浅,希望看到这篇博客的同学能够多多赐教。

补充

Jetty有一个问题,默认使用nio连接会把资源文件(html, css)锁定,解决方案是把nio改为bio:

<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"><port>9080</port>
</connector>
<connector implementation="org.eclipse.jetty.server.ssl.SslSelectChannelConnector"><port>9443</port><password>changeit</password>
</connector>
<!--这两个connector的配置要改为:-->
<connector implementation="org.eclipse.jetty.server.bio.SocketConnector"><port>8080</port>
</connector>
<connector implementation="org.eclipse.jetty.server.ssl.SslSocketConnector"><port>8443</port><password>changeit</password>
</connector>

Eclipse下通过Maven的Jetty插件运行Web工程的配置,包括启动https相关推荐

  1. 如何通过Maven的Jetty插件运行Web工程

    From: https://blog.wuwii.com/maven-jetty.html Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行 ...

  2. 如何通过Maven的Tomcat插件运行Web工程

    From: https://blog.wuwii.com/maven-tomcat.html Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访 ...

  3. SpringMVC整合DWR(Maven项目+jetty插件运行)

    SpringMVC的maven项目创建可以参考这篇文章:http://www.cnblogs.com/crazy-fox/archive/2012/02/18/2357619.html 建立一个Spr ...

  4. Eclipse运行maven的jetty插件内存溢出解决

    系统运行在MAVEN中的jetty插件下,当在ECLIPSE运 clean jetty:run时系统提示 OutOfMemoryError: PermGen space. 解决办法: 设置run as ...

  5. Eclipse下新建Maven项目、自动打依赖jar包

    当我们无法从本地仓库找到需要的构件的时候,就会从远程仓库下载构件至本地仓库.一般地,对于每个人来说,书房只有一个,但外面的书店有很多,类似第,对于Maven来说,每个用户只有一个本地仓库,但可以配置访 ...

  6. Jetty插件运行报500错误

    Jetty插件运行报500错误 在配置jetty,点击运行后,发现web页: 百度后发现是因为项目运行jdk版本高(jdk13.0.2) 所以找到了jdk1.8.0_231版本,配置环境变量后,修改项 ...

  7. MyEclipse + Maven开发Web工程的配置

    MyEclipse + Maven开发Web工程的配置 1. 使用Maven创建webapp工程----原因是使用Maven时一般需要遵循一定的目录结构,虽然也可以使用不同的目录结构,但目前还不熟悉如 ...

  8. 5.Maven和Eclipse整合(两种方式进行插件的安装),Maven相关设置,Eclipse下创建Maven项目

     1  第一种方式是:在连网的情况下,通过在helpàInstall下安装. 新的地址是:http://download.eclipse.org/technology/m2e/releases 2 ...

  9. java maven jetty_maven jetty 插件使用

    本机环境 JDK 7 Maven 3.2 Jetty 9.2 Eclipse Luna pom.xml 配置 在你的 pom.xml 文件中添加 jetty 插件的描述信息(查看Jetty更多的版本信 ...

最新文章

  1. 修改Intellij IDEA中工程对应的Java SDK、Scala SDK
  2. 把伪需求扼制在摇篮里-B端产品需求方法论
  3. Angular Universal 的演进历史
  4. Linux结构体变量报错,23. Linux模式设计
  5. 【LeetCode】19. Remove Nth Node From End of List
  6. 二叉树学习笔记--先序遍历
  7. Python-密码字典生成
  8. 网易有道词典去广告版
  9. 拼多多进军社区团购 店宝宝:巨头竞争加剧
  10. 编辑修改PDF文件的简单方法
  11. “远程网络教学系统”UML用例图(练习题)
  12. arm版红帽企业linux,红帽:ARM架构下的Linux不是玩笑
  13. apply update from sdcard
  14. 联想笔记本无法识别USB(通用串行总线(USB)的控制器问题)
  15. 安全面试之安全基础(二)
  16. JXTA技术与应用发展(转载)
  17. w10不能访问网络计算机,win10系统无法访问局域网电脑的操作方法
  18. 我与大神思考问题的差距在哪里?
  19. 计算机系lol口号,lol战队口号大全
  20. 使用决策树(decision-tree)预测隐形眼镜类型(标签二值化(LabelBinarizer)复原输出)

热门文章

  1. 中国人事考试网发布2021年监理工程师成绩合格标准
  2. Linux 命令自动补全包bash-completion
  3. bok-choy PO测试框架(python版)
  4. 支付宝,微信的提现即时到账。【转账给支付宝用户服务】【企业付款】
  5. 移动应用统计的基本原理及 UMID 方案解析
  6. 【现代机器人学】学习笔记八:轨迹生成
  7. 【运行vue项目时遇到的错误解决方案】
  8. 关于图文转换的web工具
  9. 高手应对冲突,无外乎这9条秘诀
  10. swift控制流 来自cocoachina