Apache Groovy 常用 CLI 命令与工具详解
详解 Apache Groovy 命令行工具:groovy 的 -e/-l/-a/-p/-n/-c/-cp、groovyc 的 -d/-cp、groovysh、groovyConsole、grape 及 Gradle/Maven 集成用法。
Apache Groovy 常用 CLI 命令与工具详解
Groovy 在 $GROOVY_HOME/bin 下提供 groovy、groovyc、groovysh、groovyConsole、grape 等工具。本文按工具逐一说明常用参数,命令与回显均来自真实执行。
一、groovy 命令
1.1 -e 内联执行
-e(或 -e=)直接执行一段脚本片段:
# groovy -e 'println "hello"; println([1,2,3].collect{it*2})'
hello
[2, 4, 6]
1.2 -cp 指定类路径
-cp 必须作为第一个参数,用于引入外部 jar:
# groovy -cp /opt/libs/app.jar -e 'println Class.forName("com.example.App")'
1.3 -n / -p 逐行处理
-n 对每一行执行脚本(隐式变量 line),-p 在 -n 基础上打印每行结果:
# printf "1\n2\n3\n" | groovy -n -p -e 'line.toInteger()*10'
10
20
30
1.4 -a 自动分词
-a(--autosplit)按分隔符把每行拆分为字段,隐式变量为 split:
# printf "name,age\nTom,30\nJerry,28\n" | groovy -n -a "," -e 'println split[0] + " -> " + split[1]'
name -> age
Tom -> 30
Jerry -> 28
1.5 -c 指定编码
-c(--encoding)指定源文件字符集,避免中文乱码:
# groovy -c UTF-8 /root/demo.groovy
1.6 -l 监听端口
-l(--listen)以服务器模式监听端口,对每个连接逐行读取并处理:
# groovy -l 9401 -e 'line.reverse()'
groovy is listening on port 9401
连接后由 GroovySocketServer 逐行读取输入:
java.net.SocketException: Connection reset
at groovy.ui.GroovySocketServer$GroovyClientConnection.run(GroovySocketServer.java:193)
1.7 -D 与静态编译开关
# groovy -Dapp.env=prod -e 'println System.getProperty("app.env")'
prod
# groovy --compile-static -e 'int add(int a,int b){a+b}; println add(3,4)'
7
二、groovyc 编译器
2.1 -d 输出目录
指定 .class 输出目录:
# groovyc -d /root/classes /root/Hello.groovy
# ls -l /root/classes
-rw-r--r-- 1 root root 2366 Hello.class
运行编译产物需将 groovy-4.0.24.jar 一并加入类路径:
# java -cp /root/classes:/opt/groovy/lib/groovy-4.0.24.jar Hello Apache
Hello, Apache from compiled Groovy!
2.2 -cp 编译期类路径
# groovyc -cp /opt/libs/app.jar -d /root/classes /root/app.groovy
2.3 --indy(Groovy 4 说明)
在 Groovy 2.x/3.x 中,--indy 用于启用 invokedynamic 编译模式。Groovy 4.0.24 默认即采用 invokedynamic,该参数已移除,传入会被当作源文件路径处理:
# groovyc --indy -d /root/indy/out /root/indy/Hello.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
--indy: --indy (No such file or directory)
1 error
如需调整优化选项,请改用配置脚本(见 2.4)。
2.4 --configscript
为本次编译加载配置脚本,例如全局开启静态编译:
// config.groovy
withConfig(configuration) {
ast(groovy.transform.CompileStatic)
}
# groovyc --configscript=/root/config.groovy -d /root/classes /root/app.groovy
2.5 -j 联合编译
-j(--jointCompilation)允许 Groovy 与 Java 源码相互引用、统一编译:
# groovyc -j -d /root/classes /root/mix/*.groovy /root/mix/*.java
三、groovysh 交互式 Shell
# mkdir -p /opt/groovy-work && cd /opt/groovy-work
# printf "m=[a:1,b:2]\nm.collect{ k,v -> k.toUpperCase()+v }.join(\",\")\n:exit\n" | groovysh
Groovy Shell (4.0.24, JVM: 11.0.32.1)
Type ':help' or ':h' for help.
-------------------------------------------------------------------------------
groovy:000> m=[a:1,b:2]
===> [a:1, b:2]
groovy:000> m.collect{ k,v -> k.toUpperCase()+v }.join(",")
===> A1,B2
groovy:000> :exit
常用内部命令::help 帮助、:exit 退出、:load <file> 加载脚本、:class 查看当前对象。注意务必在业务目录启动,避免在根目录触发类路径全盘扫描。
四、groovyConsole
groovyConsole 是图形化脚本控制台,适合本机交互调试:
# groovyConsole
服务器无图形界面时可配合 X11 转发使用;纯命令行环境建议改用 groovysh。
五、grape 依赖缓存管理
grape 用于查看与管理 Grape 缓存(默认 ~/.groovy/grapes)。
5.1 install
# grape install org.apache.commons commons-lang3 3.14.0
:: resolving dependencies :: caller#all-caller;working62
confs: [default]
found org.apache.commons#commons-lang3;3.14.0 in ibiblio
5.2 list
# grape list org.apache.commons
org.apache apache [30]
org.junit junit-bom [5.10.0]
org.apache.commons commons-parent [64]
org.apache.commons commons-lang3 [3.14.0]
4 Grape modules cached
4 Grape module versions cached
5.3 resolve
# grape resolve org.apache.commons commons-lang3 3.14.0
/root/.groovy/grapes/org.apache.commons/commons-lang3/jars/commons-lang3-3.14.0.jar
其余子命令:grape uninstall(卸载)、grape help(帮助)。
六、Gradle / Maven 集成命令
6.1 Gradle 构建
build.gradle:
plugins { id 'groovy'; id 'application' }
repositories { mavenCentral() }
dependencies { implementation 'org.apache.groovy:groovy:4.0.24' }
application { mainClass = 'App' }
运行:
# gradle run -q --no-daemon
Hello from Gradle + Groovy 4.0.24
sorted = [1, 2, 3, 4, 5]
6.2 Maven 依赖坐标
在 pom.xml 中引入 Groovy:
<dependency>
<groupId>org.apache.groovy</groupId>
<artifactId>groovy</artifactId>
<version>4.0.24</version>
</dependency>
groovy-maven-plugin 与 gmavenplus-plugin 可执行 Groovy 脚本:
# mvn -q compile
# mvn -q org.codehaus.gmavenplus:gmavenplus-plugin:4.1.0:execute
6.3 与手工命令的对应关系
Gradle / Maven 最终调用的是同一套 groovyc 能力;离线排障时可用 groovyc -cp $(cat classpath.txt) -d out src/... 复现构建期编译行为。