• Java Gradle入门指南之gretty插件(安装、命令与核心特性)


    博客逐步迁移至 极客兔兔的小站

        Java Web应用开发时常使用Gradle来进行项目管理,可以十分便利地解决包依赖等问题。war插件的出现,让项目部署成为一个复制粘贴的过程,那有没有办法让Java web应用的部署,就像windows下安装软件,双击一下就可以呢?又或者Java web应用开发过程中,有没有办法自动检测项目变化,自动编译与加载呢?

        gretty支持热部署、HTTPS、转发、调试、自动化运行环境等诸多特性,让开发和部署变得更加简单。本文将介绍gretty插件的最常用的几种特性和使用方法,适合对使用过Java web和Gradle的童鞋。如有错误,请不吝指出,非常感谢;如本文对你有用,右下角点个推荐吧!

    1.安装gretty

    // JDK6+,Gradle 1.10+
    // build.gradle
    buildscript {
        repositories {
             jcenter()
        }
        dependencies {
             classpath 'org.akhikhl.gretty:gretty:+'
        }
    }
    
    apply plugin: 'org.akhikhl.gretty'
    

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

    2.常用命令

    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等,与2.1-2.2用法一致

    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}

    本文同步发布在 Github,后期将不断更新,欢迎关注。

  • 相关阅读:
    BUG记录之 Database Connection Can’t Be Open!
    C#基础拾遗03注册表保存用户设置
    JQuery Ajax小磨合1
    SQL Server几个常用Date函数(二)
    浅谈设计模式01策略模式
    C#基础拾遗02XML串行化
    SQL Server 2008 R2学习心得
    WebService重载问题
    SQL Server几个常用date函数(一)
    C#获取打印机列表
  • 原文地址:https://www.cnblogs.com/gzdaijie/p/5267166.html
Copyright © 2020-2023  润新知