第二十章、groovy的生态

本文介绍了 Groovy 在多个领域的应用案例,包括 Grapes 自我包含脚本、Gradle 构建、静态代码分析等,并展示了 Groovy 在 Web 开发、桌面应用及云开发等方面的能力。

1、Groovy的Grapes自我包含脚本

@Grab(group='org.ccil.cowan.tagsoup', module='tagsoup', version='1.2')

import org.ccil.cowan.tagsoup.Parser
// 防爬虫,有限制403了

def parser = new XmlParser(new Parser())

def html = parser.parse("http://manning.com/koenig2")



def twitterUrls = html.body.'**'.a.@href.grep(~/.*twitter.*/)

println twitterUrls.join( "\n" )



assert 'http://www.twitter.com/mittie' in twitterUrls

  • 默认下载的jar是在 用户目录/.groovy/grape目录下, 可以通过配置jvm入参 Dgrade.root=/home/.m2/repository 来改变Grapes使用本地maven仓库

  • 可以指定远程仓库

    • @GrabResolver(name='myrepo', root='http://myrepo.my-company.com/')
      
      // 也可以直接编辑 .groovy/grapeConfig.xml 永久变更grape相关参数
      

2、windows自动脚本

  • 主要是window窗口

3、快速启动的GroovyServ

  • 解决jvm启动慢的问题

4、Gradle的项目的自动构建

  • package com.jack.groovy.ch20
    
    /**
     * @author liangchen* @date 2020/12/22
     */
    
    // 建立一个build.gradle 文件
    apply plugin:'groovy'
    
    repositories{
        mavenCentral()
    }
    
    dependencies {
    
        compile     'org.codehaus.groovy:groovy-all:2.4.0'
    
        testCompile 'junit:junit:4.12'
    
    }
    
    // 建立一个jar
    version = '1.0'
    jar{
        baseName = 'mySample'
        manifest {
            attributes  'Implementation-Title': 'My Sample',
    
                    'Implementation-Version':  version
        }
    }
    
    //发布一个jar
    uploadArchives{
        repositories{
            flatDir(dirs: file('my_repository'))
        }
    }
    

5、CodeNarc 静态代码分析

  • 有点类似阿里巴巴代码插件检查
Map map = [a: 1, b: 2, "$c": 3, 'b': 4 ];
  • 重复key, 两个b
  • GString作为字符串作为key($c),没有被使用到,hashcode时候不稳定
  • 结尾没有必要分号
  • map这个字段没有用到
def squareMapValues = { map ->

    if (map == null) { return null }

    if (!map) { return [] }

    return map.values().collect { it * it }

}

assert [1, 4, 9] == squareMapValues([a: 1, b: 2, c: 3])
  • 没有必要return 关键字
  • return [] 替换为return null

6、GContracts 提高设计

  • 有点类似条件执行方法和类

  • @Grab('org.gcontracts:gcontracts-core:1.2.12')
    
    import org.gcontracts.annotations.*
    
    
    // 定义这个壶容量大小区间
    @Invariant({ waterVolume >= 0; waterVolume <= maxVolume })
    
    class Kettle {
    
        int waterVolume = 0
    
        int maxVolume = 1000
    
    
    
        // ...
    
    }
    
    
    @Requires({ amount > 0 })
    
    @Ensures({ waterVolume == maxVolume || waterVolume > old.waterVolume })
    
    void addWater(int amount) {
    
        waterVolume = Math.min(maxVolume, amount + waterVolume)
    
    }
    
    @Requires({ desiredAmount > 0 })
    
    @Ensures({
    
        result >= 0;
    
        result == 0 ? waterVolume==old.waterVolume : waterVolume<old.waterVolume
    
    })
    
    int pour(int desiredAmount) {
    
        int amountPoured = (desiredAmount <= waterVolume
    
                ? desiredAmount
    
                : waterVolume)
    
        waterVolume = waterVolume - amountPoured
    
        amountPoured
    
    }
    

7、Grails进行web开发

  • web开发框架

8、Griffon 进行桌面开发

  • 支持各个平台

9、Gaelyk进行云开发

  • Google App engine(GAE)
  • 生成网站

10、总结

  • groovy可以生成原生代码

  • /**
     * @author liangchen* @date 2020/12/22
     */
    class Hello {
        def methodMissing(String name, args) {
            println "Hello ${name}!"
        }
    }
    
    def hello = new Hello()
    hello.Groovy()
    hello.Javascript()
    hello.grooscript(
    
  • /**
     * @author liangchen* @date 2020/12/22
     */
    // 利用groovy 生成node.js原生代码
    @Grab('org.grooscript:grooscript:1.2.2')
    
    import org.grooscript.GrooScript
    
    def conversionOptions = [:]
    conversionOptions['initialText'] = "var gs = require('grooscript');"
    
    GrooScript.convert 'source.groovy', '.', conversionOptions
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值