zoukankan      html  css  js  c++  java
  • Jetty入门(1-3)Eclipse集成gradle-Gretty插件或maven-jetty插件运行应用

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

    一、gradle插件

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

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

    Groovy代码  收藏代码
    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
    Groovy代码  收藏代码
    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

    Xml代码  收藏代码
    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" 中加入: 

    Groovy代码  收藏代码
    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'

  • 相关阅读:
    BZOJ3456: 城市规划
    BZOJ4555: [Tjoi2016&Heoi2016]求和
    关于wqs二分(凸优化) 实数二分和整数二分的一些讨论
    求逆矩阵模板
    再探模拟费用流一类问题
    「九省联考 2018」秘密袭击(差分+生成函数+拉格朗日插值+整体dp+线段树合并):
    「九省联考 2018」IIIDX(贪心+线段树(平衡树)):
    【GDOI2020模拟03.28】数二数(two) (计数动态规划):
    「十二省联考 2019」骗分过样例(提答+数论+乱搞):
    二进制分组学习小记:
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/7070989.html
Copyright © 2011-2022 走看看