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

被折叠的 条评论
为什么被折叠?



