我更喜欢使用脚本语言来完成简短的任务,比如一个非常简单的http机器人,批量导入/导出数据到某个地方等等......基本的丢弃脚本和简单的东西.关键是,脚本语言只是编写快速程序的有效工具.至于我在这一点上对Groovy的理解......
如果你是在Groovy编程,你wan't写一个快速脚本,你会不会被迫回到常规的Java语法(而我们知道如何能相比,脚本语言进行卷积)以做更复杂的事情?例如,如果我想做一些http脚本,我不会直接使用java语法来调用Commons HttpClient吗?对我而言,脚本语言的意义在于快速键入和强制构造.这里有另外一个东西,它似乎并不认为有被开发为常规的基于库的任何激励时,已经有这么多优秀的Java一个是在那里,从而使常规似乎是一个Java语言相关的轻微脚本功能.
所以现在我想知道我是否可以转换为Groovy作为脚本语言或继续使用更常见的脚本语言,如Perl,Python或Ruby.
@Zombies,让我向您展示我最近写的一个脚本的快速示例:
def fetch(build, toFile) { new FTPClient().with { connect ftpServer enterLocalPassiveMode() login ftpUser, ftpPassword changeWorkingDirectory "/var/staging/revision-${build}" fileType = FTPClient.BINARY_FILE_TYPE toFile.withOutputStream { ostream -> retrieveFile "build-${build}.zip", ostream } disconnect() } }
它使用commons-net API,但我认为你会同意它比同类Java程序有更清晰的语法.因此,我不认为使用Java API会破坏使用脚本语言的目的.此外,它可以帮助您利用Java API的现有知识,因此是一种非常实用的方法.
Groovy的一个目标是与Java实现透明的互操作性.Groovy是设计"具有脚本功能的Java依赖语言".但是,我不认为这些功能很小 - Groovy有许多静态编程语言(如Java)中没有的功能.
总结一下:如果您根本不关心Java,那么请使用更通用的脚本语言,例如Python或Perl.如果您想以脚本方式使用Java代码库,Groovy是一个不错的选择.
Groovy可以非常方便地编写脚本.最近我需要一个脚本来将Maven依赖项提取到一个lib
目录中,最后得到一个groovy脚本.这个片段解析一个pom并给你一个罐子列表.非常适合XML解析!
#!/usr/bin/env groovy def pom = new XmlSlurper().parse('pom.xml') def repo = "${System.env.HOME}/.m2/repository" pom.dependencies.dependency.each { dep -> def jarName = "${dep.artifactId}-${dep.version}.jar" def groupPath = dep.groupId.text().replaceAll('\\.', '/') def jarPath = "${repo}/${groupPath}/${dep.artifactId}/${dep.version}" println "$jarPath/$jarName" }