Apache Groovy 常用 CLI 命令与工具详解

详解 Apache Groovy 命令行工具:groovy 的 -e/-l/-a/-p/-n/-c/-cp、groovyc 的 -d/-cp、groovysh、groovyConsole、grape 及 Gradle/Maven 集成用法。

Apache GroovyApache GroovyJavaApache运维2026/10/12

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/... 复现构建期编译行为。