本文探讨如何高效快速地开发和调试基于gradle管理的web应用。
gradle是新一代应用构建、版本发布管理工具,功能强大而灵活,号称将取代maven的霸主地位,可是目前在开发和调试web应用程序方面还有不少不足,效率低下。
那么咱们能不能基于gradle强大而灵活的功能,探寻出一种简单、高效、便捷的方法,以便在调试web应用过程当中修改程序无需重启应用服务器和应用呢?答案是确定的,接下来就给你们分享bboss开发团队在使用gradle开发调试web应用所使用的行之有效的工具和方法。
工具和方法涉及的技术
1.gradle自定义sourceSet测试源码集技术
2.jetty嵌入式启动技术
3.gradle compileOnly级别包依赖技术(gradle 3.0及以上版本支持)
4.采用bboss ioc管理jetty 应用配置
工具集成和使用
咱们直接使用本文附件中包含的工具小程序来调试web应用,这是一个通用的小工具,能够按照如下步骤将这个工具集成到本身web应用对应的gradle工程中。注意:咱们将工具对应的程序放置到工程的测试源码目录下面,将工具依赖的jar包级别定义为compileOnly,这样能够避免将工具对应的程序、配置和jar发布到最终的项目版本中(真正的绿色无污染)。
第一步 集成调试web应用工具
工具包含启动jetty容器的程序和配置文件,这些文件包含在本文附件中,点击这里下载:下载
将解压后的test目录中的org目录复制到gradle工程的测试源码目录下便可,gradle能够灵活指定项目的测试源码目录,本文对应的是test目录,经过其中的类org.eclipse.jetty.webapp.JettyStart来启动和调试web应用。
下面说明一下目录test\org\eclipse\jetty\webapp下面三个文件的做用:
1.jetty.xml
文件内容: html
文件做用:配置jetty端口port,应用上下文context,应用部署描述文件web.xml位置,应用路径resourceBase,这两个路径都是相对于gradle工程根目录,能够根据须要调整相关配置。
2.webdefault.xml
这个文件内容比较多,已经配置好,无需修改,咱们只需关注其中一个配置项
useFileMappedBuffer: java
useFileMappedBuffer必须设置为false,不然在调试的过程当中js文件会被锁定,致使js文件没法进行修改。
3. JettyStart.java
在JettyStart的Main方法中,利用bboss ioc加载配置文件jetty.xml,而后启动jetty服务器和web应用。经过执行JettyStart程序,就能够像调试和运行普通的java程序同样调试和运行gradle管理web应用,能够在调试过程当中自动加载修改的程序和资源配置文件,避免因修改程序而反复构建、发布和部署应用,大大提高开发和调试的效率。目前工具只支持Http协议,能够经过扩展JettyStart类方便地提供对Https协议的支持。
上述的三个文件中,只有jetty.xml会根据项目的实际状况进行修改和调整,通常状况下其余两个文件不须要改动,除非在调试过程当中须要使用更多的jetty功能,好比增长对https协议的支持,那么能够经过修改JettyStart.java程序并在jetty.xml文件中增长相关的配置项,就能够灵活地实现。
第二步 配置工具依赖并加载工具源码和配置文件集
在工程的build.gradle文件中配置工具依赖并加载工具源码和配置文件集
1.修改自定义源码集
在test测试源码块中加载工具对应源程序和配置文件(两个xml文件和一个java类) web
2.在dependencies添加运行jetty容器和web应用所需的jar包
以compileOnly级别添加启动jetty容器和web应用所需的第三方jar包,这样在最终发布应用版本中不会包含这些额外引入jar包: apache
本文的附件中(下载)包含了能够做为参考的build.gradle样例。
第三步 运行和调试web应用
完成第一步和第二步后,咱们就能够经过JettyStart程序来运行和调试web应用了,
首先在web工程右键菜单中gradle sts插件的Refresh All功能来刷新和加载最新的build.gradle配置文件,如图示:
而后参考如下图示来调试或者运行 JettyStart,便可调试或者运行gradle管理的web应用了: 小程序
www.togv.net/guanlipeixun/4ws6xllk3xl3ciz8reaf.htmapi
www.togv.net/guanlipeixun/nscr433em4n4niblrnex.htm服务器
www.365128.com/user/aqiandao/65.htmlapp
www.365128.com/user/aqiandao/66.htmlfrontend
www.365128.com/user/aqiandao/67.htmleclipse
www.365128.com/user/aqiandao/68.html
www.365128.com/user/aqiandao/70.html
www.365128.com/user/aqiandao/71.html
www.365128.com/user/aqiandao/72.html
www.365128.com/user/aqiandao/64.html