英文来源:  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. IIS前端页面不显示详细错误解决方法

    要想解决这个问题,有三种方法可以考虑: 1.Internet信息服务(IIS)管理器 2.Web.config文件 3. 命令行 在IIS的"错误页"右边的"编辑功能设置 ...

  2. PHP7变量的内部实现

    PHP7变量的内部实现 受篇幅限制,这篇文章将分为两个部分.本部分会讲解PHP5和PHP7在zval结构体的差异,同时也会讨论引用的实现.第二部分会深入探究一些数据类型如string和对象的实现. P ...

  3. Android库项目中的资源ID冲突

    1.前言 Android Studio对模块化开发提供的一个很有用的功能就是可以在主项目下新建库项目(Module),但是在使用库项目时却有一个问题就是资源ID冲突,因为编译时SDK会自动帮我们处理这 ...

  4. python安装第三方库

    在编写爬虫程序时发现unsolved import 一时不解,以为是ide出问题了,其实是没有安装第三方库导致的. 于是到https://pypi.python.org/pypi/requests/去 ...

  5. thinkphp5多图上传 js部分

    在项目中常会用到多图上上传,那就需要多图上传后需要预览,并且能删掉传错(不想传)的图,然而 测试了半天 并不知道jq怎么写,parent()parents()用了半天无果,罢了,还是用原生js来写.这 ...

  6. R语言-文本挖掘

    ---恢复内容开始--- 案例1:对主席的新年致辞进行分词,绘制出词云 掌握jieba分词的用法 1.加载包 library(devtools) library(tm) library(jiebaR) ...

  7. clumsy模拟客户端网络差的场景的使用

    1.为什么需要模拟客户端网络差的情况? a. 研发环境的网络配置一般较高,网络响应快,不容易出现网络故障,但是客户使用的网络环境千差万别,不排除使用过程中遇到网络故障的情况. b.程序有些时候是多线程 ...

  8. codeforce round#466(div.2) B. Our Tanya is Crying Out Loud

    B. Our Tanya is Crying Out Loud time limit per test1 second memory limit per test256 megabytes input ...

  9. 剑指Offer-二叉树的下一个结点

    题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 思路 分析二叉树的下一个节点,一共有以下情况: 二叉树 ...

  10. Django Haystack 全文检索与关键词高亮

    Django Haystack 简介 django-haystack 是一个专门提供搜索功能的 django 第三方应用,它支持 Solr.Elasticsearch.Whoosh.Xapian 等多 ...