英文来源:  http://akhikhl.github.io/gretty-doc/Getting-started.html

一、gradle插件

1、使用gretty来运行jetty: gradle appRun

如何安装gretty插件参见附录!

  1. apply plugin: 'war'
  2. apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'
  3. targetCompatibility = 1.8
  4. version = "1.0"
  5. ext {
  6. springVersion = "3.2.8.RELEASE"
  7. }
  8. repositories{
  9. mavenCentral()
  10. }
  11. [compileJava,compileTestJava,javadoc]*.options*.encoding = "gbk"
  12. dependencies{
  13. compile "org.apache.struts:struts2-core:2.1.8.1"
  14. providedCompile "javax.servlet:javax.servlet-api:3.1.0"
  15. providedCompile "javax.servlet.jsp:jsp-api:2.2.1-b03"
  16. testCompile "junit:junit:4.11"
  17. }

2、使用Gradle 官方jetty插件来运行jetty(目前仅支持到jetty6, 不支持 jetty7, 8, 9):  gradle jettyRunWar

  1. apply plugin:"war"
  2. apply plugin:"jetty"
  3. targetCompatibility = 1.8
  4. version = "1.0"
  5. ext {
  6. springVersion = "3.2.8.RELEASE"
  7. }
  8. repositories{
  9. mavenCentral()
  10. }
  11. [compileJava,compileTestJava,javadoc]*.options*.encoding = "gbk"
  12. dependencies{
  13. compile "org.apache.struts:struts2-core:2.1.8.1"
  14. providedCompile "javax.servlet:javax.servlet-api:3.1.0"
  15. providedCompile "javax.servlet.jsp:jsp-api:2.2.1-b03"
  16. testCompile "junit:junit:4.11"
  17. }
  18. jettyRun{
  19. webAppSourceDirectory file("$projectDir/src/main/webapp")
  20. httpPort 8080
  21. contextPath project.name
  22. scanIntervalSeconds 0
  23. reload "automatic"
  24. }

二、maven的jetty插件 

1、方式一:使用maven插件

使用Maven的命令来在jetty中运行web应用:  mvn jetty:run

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.lyq.action</groupId>
  6. <artifactId>e14_3</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <packaging>war</packaging>
  9. <name>e14_3</name>
  10. <properties>
  11. <struts2.version>2.3.16.3</struts2.version>
  12. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  13. </properties>
  14. <dependencies>
  15. <dependency>
  16. <groupId>org.apache.struts</groupId>
  17. <artifactId>struts2-core</artifactId>
  18. <version>${struts2.version}</version>
  19. </dependency>
  20. <dependency>
  21. <groupId>org.apache.struts</groupId>
  22. <artifactId>struts2-config-browser-plugin</artifactId>
  23. <version>${struts2.version}</version>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.apache.struts</groupId>
  27. <artifactId>struts2-junit-plugin</artifactId>
  28. <version>${struts2.version}</version>
  29. <scope>test</scope>
  30. </dependency>
  31. <dependency>
  32. <groupId>commons-logging</groupId>
  33. <artifactId>commons-logging</artifactId>
  34. <version>1.1.3</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>log4j</groupId>
  38. <artifactId>log4j</artifactId>
  39. <version>1.2.17</version>
  40. </dependency>
  41. <dependency>
  42. <groupId>junit</groupId>
  43. <artifactId>junit</artifactId>
  44. <version>4.5</version>
  45. <scope>test</scope>
  46. </dependency>
  47. <dependency>
  48. <groupId>javax.servlet</groupId>
  49. <artifactId>servlet-api</artifactId>
  50. <version>2.4</version>
  51. <scope>provided</scope>
  52. </dependency>
  53. <dependency>
  54. <groupId>javax.servlet</groupId>
  55. <artifactId>jsp-api</artifactId>
  56. <version>2.0</version>
  57. <scope>provided</scope>
  58. </dependency>
  59. </dependencies>
  60. <build>
  61. <plugins>
  62. <plugin>
  63. <groupId>org.mortbay.jetty</groupId>
  64. <artifactId>jetty-maven-plugin</artifactId>
  65. <version>8.1.7.v20120910</version>
  66. <configuration>
  67. <stopKey>CTRL+C</stopKey>
  68. <stopPort>8999</stopPort>
  69. <systemProperties>
  70. <systemProperty>
  71. <name>log4j.configuration</name>
  72. <value>file:${basedir}/src/main/resources/log4j.properties</value>
  73. </systemProperty>
  74. <systemProperty>
  75. <name>slf4j</name>
  76. <value>false</value>
  77. </systemProperty>
  78. </systemProperties>
  79. <scanIntervalSeconds>10</scanIntervalSeconds>
  80. <webAppSourceDirectory>${basedir}/src/main/webapp/</webAppSourceDirectory>
  81. <webAppConfig>
  82. <contextPath>/e14_3</contextPath>
  83. <descriptor>${basedir}/src/main/webapp/WEB-INF/web.xml</descriptor>
  84. </webAppConfig>
  85. </configuration>
  86. <dependencies>
  87. <dependency>
  88. <groupId>log4j</groupId>
  89. <artifactId>log4j</artifactId>
  90. <version>1.2.17</version>
  91. </dependency>
  92. </dependencies>
  93. </plugin>
  94. </plugins>
  95. </build>
  96. </project>

2、方式二:添加 Jetty 相关依赖以及进行类似下面代码配置:

    package com.coderknock.jettystudy; 

    import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext; public class WebAppContextWithFolderServer {
public static void main(String[] args) throws Exception {
Server server = new Server(8080); WebAppContext context = new WebAppContext();
context.setContextPath("/myapp");
context.setDescriptor("E:/share/test/struts2-blank/WEB-INF/web.xml");
context.setResourceBase("E:/share/test/struts2-blank");
context.setParentLoaderPriority(true);
server.setHandler(context); server.start();
server.join();
}
}

三、附录

1、安装gretty的三种方式

1.1、方式一:在app应用的 "build.gradle" 中加入: 

  1. apply plugin: 'war'
  2. apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'

大功告成! 现在你可以使用以下命令启动你的web-app;

Cmd代码  
  1. gradle appRun

你也可以使用其他 Gretty tasks (Gretty 任务) 来运行和调试你的web-app 或者根据你的需求 configure Gretty  (配置Gretty).

1.2、方式二:从以下URL下载脚本并放置在项目文件夹下安装getty插件:

https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin

Groovy代码  

  1. apply from: 'gretty.plugin'

1.3、方式三:如下脚本加入你的 "build.gradle":

Groovy代码  

  1. buildscript {
  2. repositories {
  3. jcenter()
  4. // enable this to use snapshot versions of Gretty:
  5. // maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local' }
  6. }
  7. dependencies {
  8. classpath 'org.akhikhl.gretty:gretty:+'
  9. }
  10. }
  11. repositories {
  12. jcenter()
  13. // enable this to use snapshot versions of Gretty:
  14. // maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local' }
  15. }
  16. apply plugin: 'org.akhikhl.gretty'

2、getty插件的命令

2.1 gradle appRun

编译当前项目,不依赖于war任务,

另有appRunWar、appRunDebug、appRunWarDebug

2.2 gradle appStart

编译当前项目,使用新java线程开启服务,监听端口,等待HTTP请求

不依赖于war任务

不主动关闭服务,即一直在运行,需用gradle appStop关闭

另有appStartWar、appStartDebug、appStartWarDebug

2.3 gradle jetty* / gradle tomcat*

包含Start、Run、Stop等

3.核心特性

3.1 选择servlet 容器

gretty {
// 端口默认8080
// serlvetContainer 支持 jetty7/8/9,tomcat7/8
// contextPath 设置根路径,默认为项目名称
port = 8081
serlvetContainer = 'jetty9'
contextPath = '/'
}

3.2 热部署(Gretty 1.1.5+)

常用属性

scanInterval:监视周期,单位为秒,设置为0等于完全关闭热部署
scanDir:需要监视的文件夹
recompileOnSourceChange:监视源码变动,自动编译
reloadOnClassChange:编译的类发生改变,自动加载
reloadOnConfigChange:WEB-INF或META-INF发生改变
reloadOnLibChange:依赖发生改变
Gretty默认如下

scanInterval 设置为1,每秒扫描改动1次
scanDir默认为下 :

${projectdir}/src/main/java
${projectdir}/src/main/groovy
${projectdir}/src/main/resources
${projectdir}/build/classes/main
${projectdir}/build/resources/main

recompileOnSourceChange、reloadOnClassChange、reloadOnConfigChange 和 reloadOnLibChange默认为true

3.3 快速加载

fastReload属性,默认为true,监听webapp/中的内容,文件发生改变,无需重启。
3.4 添加新的资源目录

// 除了src/main/webapp外,可另外指定资源目录
gretty{
// ...
extraResourceBase 'dir1',
extraResourceBases 'dir2','dir3'
// ...
}
3.5 HTTPS 支持

生成自签名证书,仅在开发时使用

gretty {
httpsEnabled = true
// httpEnabled = false 禁用http
// httpsPort = 443 httpsPort默认为 8443
}
certificate → "${project.buildDir}/ssl/cert"
key-store → "${project.buildDir}/ssl/keystore"
key-store and key-manager passwords→"${project.buildDir}/ssl/properties"
key-store → 配置HTTPS连接

手动配置

gretty {
sslKeyStorePath = '/some/path/keystore'
sslKeyStorePassword = 'someKeystorePassword'
sslKeyManagerPassword = 'someKeyManagerPassword'
sslTrustStorePath = '/another/path/trust_keystore'
sslTrustStorePassword = 'someTrustStorePassword'
}
3.6 转发(Gretty 1.1.7+)

步骤1:在WEB-INF/web.xml中加入以下内容

<filter>
<filter-name>RedirectFilter</filter-name>
<filter-class>org.akhikhl.gretty.RedirectFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RedirectFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
步骤2:创建WEB-INF/filter.groovy,设置转发规则

// 根地址转发到 index.html
filter relPath: '/', {
forward 'index.html'
}
// 旧地址转发到新地址
filter relPath: '/old/path', {
redirect contextPath + '/new/path'
}
// 地址参数转为查询参数
filter relPath: ~'/path/(.*)', { matches ->
redirect new URIBuilder(requestURI).setPath(contextPath + '/anotherPath')
.setQuery(matches.relPath[0][1])
}
// 将HTTP流量全部转发至HTTPS
filter scheme: 'http', {
redirect new URIBuilder(requestURI).setScheme('https').setPort(httpsPort)
}

3.7 调试(Debug)

// 为所有的debug命令配置参数
gretty {
debugPort = 5005 // 默认
debugSuspend = true // 默认
}
// 仅针对appRunDebug
gretty {
afterEvaluate {
appRunDebug {
debugPort = 5005
debugSuspend = true
}
}
}

4.产品构建

4.1 gradle buildProduct

生成安装文件
生成目录位于 build/output/${project.name}
结构如下

--build/output/${project.name}
|--conf/ => 配置文件
|--runner/ => servlet container 所需库
|--starter/
|--webapps/ => java web 应用
|--restart.bat/sh
|--run.bat/sh
|--start.bat/sh
|--stop.bat/sh
多应用,需在build.gradle中配置 product,例如

product {
webapp project // include this project
webapp ':ProjectA'
webapp ':ProjectB'
}
4.2 gradle archiveProduct

打包生成的安装文件
生成目录位于 build/output/${project.name}

四、一个使用gretty插件的例子:

build.gradle

apply plugin: "war"
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.akhikhl.gretty:gretty:1.2.4'
}
}
apply plugin: 'org.akhikhl.gretty'
group = "org.exam"
version = "1.0"
ext {
jvmVersion="1.8"
springVersion = "4.2.1.RELEASE"
sl4jVersion="1.7.7"
}
repositories {
mavenCentral()
}
[compileJava, compileTestJava, javadoc]*.options*.encoding = "UTF-8"
configurations {
all*.exclude module: 'commons-logging'
}
dependencies {
compile("org.slf4j:jcl-over-slf4j:$sl4jVersion")
compile("org.slf4j:slf4j-log4j12:$sl4jVersion")
compile("org.springframework:spring-webmvc:$springVersion")
providedCompile("javax.servlet:javax.servlet-api:3.1.0")
compile("commons-fileupload:commons-fileupload:1.3.1")
compile("com.fasterxml.jackson.core:jackson-databind:2.3.1")
compile("org.apache.taglibs:taglibs-standard-impl:1.2.1")
testCompile("org.springframework:spring-test:$springVersion")
testCompile("junit:junit:4.12")
}
/* 解决设置版本不起作用问题 */
tasks.withType(JavaCompile) {
sourceCompatibility = jvmVersion
targetCompatibility = jvmVersion
}
gretty {
port = 8080
contextPath ="/${project.name}"
servletContainer = 'jetty9'
}
a.加入gretty配置.在build.gradle加上2-9行是gretty插件的配置.
b.最后五行是gretty是适配tomcat或jetty的配置.其中不配置servletContainer,默认为jetty9,这个值可以是'jetty7', 'jetty8', 'jetty9', 'tomcat7', 'tomcat8'

Jetty入门(1-3)Eclipse集成gradle-Gretty插件或maven-jetty插件运行应用的更多相关文章

  1. Eclipse集成Gradle 【Eclipse在线安装Gradle插件方法】

    本章将介绍了Eclipse集成Gradle.以下是将Gradle插件添加到Eclipse的步骤. 步骤1 - 打开Eclipse Marketplace 打开在系统中安装好的Eclipse. 转到 J ...

  2. Maven学习(3) - Maven和Eclipse集成和构建多模块Maven项目

    最近在工作中越来越经常的用到了Maven作为项目管理和Jar包管理和构建的工具,感觉Maven的确是很好用的.而且要将Maven的功能最大发挥出来,多模块是一个很好的集成例子. 一个Maven项目包括 ...

  3. Gradle安装 Gradle效率提升 eclipse安装gradle插件 【我】

    Gradle安装 从官网下载 gradle4.6版本,也可以从svn地址下载 https://downloads.gradle.org/distributions/gradle-4.6-bin.zip ...

  4. Jetty入门(1-2)eclipse集成jetty插件并发布运行应用

    一.eclipse集成jetty插件 1.从市场安装jetty插件 2.使用jetty插件发布应用和配置运行环境 debug配置默认共用上述run配置 3.使用jetty插件启动运行和停止运行选中的应 ...

  5. eclipse集成jetty开发web项目(不采用maven方式)

    以前开发过程部署项目都是采用tomcat,偶然发现jetty,所以试了下,挺方便的,直切主题. 1.下载jetty,楼主使用的jetty8,地址http://download.eclipse.org/ ...

  6. 使用Eclipse+Maven+Jetty构建Java Web开发环境(几个教程综合集成2014发行)

    工作需要使用Jetty由于web集装箱,得知Eclipse+Maven+Jetty该组合是非常好的,因此,要在网上找了很多教程,但不写或多或少特定的或过时的内容而导致最终的配置失败,易于配置为未来的同 ...

  7. Eclipse / Intellij Idea配置Git+Maven+Jetty开发环境

    作者:鹿丸不会多项式 出处:http://www.cnblogs.com/hechao123  转载请先与我联系. 最近公司给加配了Mac,本想着花一个小时的时间搭好开发环境,最后全部弄好却用了一上午 ...

  8. 用Eclipse+Maven+Jetty构建Java Web开发环境(详细笔记)

    (软件环境) 『系统』Windows 10 x64 『JAVA』JDK 1.8.0_91 『Eclipse』 Eclipse-oxygen 『Maven』 apache-maven-3.6.3 『Je ...

  9. 记录一次bug解决过程:eclipse集成lombok插件

    一 总结 eclipse集成插件lombok: 启动Spring Boot项目: sublime全局搜索关键字:ctrl + shift + F JDK8中的lambda表达式使用 二 BUG描述:集 ...

随机推荐

  1. IO模式和IO多路复用

    网络编程里常听到阻塞IO.非阻塞IO.同步IO.异步IO等概念,总听别人装13不如自己下来钻研一下.不过,搞清楚这些概念之前,还得先回顾一些基础的概念. 1 基础知识回顾 注意:咱们下面说的都是Lin ...

  2. 图像实验室 website 项目日志

    day 1 1.问题: 在演示界面选择浏览本地图片,上传以后不显示上传图片 原因:PIL库没有装好,参见之前博客重装 2.问题: 可以上传图片并在网站上显示,但是不能得到运行结果的图片. 原因:没有将 ...

  3. QT 中setUserData和setProperty问题

    在5.9的官方文档里是找不到QObject中的setUserData 的,相反他提供了setProperty(). void setUserData(uint id, QObjectUserData ...

  4. asp.net core 四 IOC&DI Autofac

    其实关于IOC,DI已经有了很多的文章,但是自己在使用中还是有很多困惑,而且相信自己使用下,印象还是会比较深刻的 关于这段时间一直在学习.net core,但是这篇文章是比较重要的,也是我自己觉得学习 ...

  5. 在Vue.js2.0中组件模板子元素数量问题

    在Vue中当利用组件进行开发时候,组件所使用的模板只可以应用于一个根实例,当你需要添加多个子元素的时候,可以用一个div将它们包裹起来,代码如下: <template id="task ...

  6. 使用shutdown命令实现局域网内远程关机、重启整蛊他人

    用法: shutdown [/i | /l | /s | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/f]    [/m \\compu ...

  7. Google Chrome Plus——绿色便携多功能谷歌浏览器

    我更新浏览器的时候一般没有时间更新这个帖子,所以具体请看我网盘下载链接里面的更新日志,请自行查看最新版本下载,谢谢. 近期更新日期:2016.8.15(此时间可能不是最新,请看我网盘里面的更新日志) ...

  8. C语言最后一次作业--总结报告

    1.当初你是如何做出选择计算机专业的决定的? 经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 当时选择计算机专业,是基于自己的高考分数和想出省的 ...

  9. Java路径类问题总结

    一.获取路径: 单独的Java类中获得绝对路径根据java.io.File的Doc文挡,可知: 默认情况下new File("/")代表的目录为:System.getPropert ...

  10. oracle相同SID对外提供多个service_names

    为数据库设置多个服务名(通过SCOPE=both设置,同时修改参数文件) SQL> show parameter service_names; NAME TYPE VALUE --------- ...