
Groovy 的 groovy 命令专用于直接解释执行 .groovy 脚本文件,而非运行 groovyc 编译生成的 JVM 字节码(.class 文件);若需执行编译后类,应使用 java 命令并显式指定 Groovy 运行时库。
groovy 的 `groovy` 命令专用于直接解释执行 `.groovy` 脚本文件,而非运行 `groovyc` 编译生成的 jvm 字节码(`.class` 文件);若需执行编译后类,应使用 `java` 命令并显式指定 groovy 运行时库。
在 Groovy 开发中,一个常见误区是混淆 groovy 和 groovyc 两个命令的职责:
- ✅
groovy Hello.groovy:直接解释执行脚本(无需编译),自动处理依赖、脚本包装和Script类型封装; - ✅
groovyc Hello.groovy:将 Groovy 源码编译为标准 JVM 字节码(生成Hello.class),但该类不是普通 Java 类——它继承自groovy.lang.Script,且强依赖 Groovy 运行时(如groovy-*.jar); - ❌
groovy Hello.class:非法操作。groovy命令不接受.class文件作为输入,它会尝试将二进制字节码当作文本脚本读取,导致解析失败(如报错Unexpected character: '')。
✅ 正确运行编译后类的方式是使用标准 java 命令,并确保类路径(-cp)包含:
- 当前目录(
.),以便加载Hello.class; - Groovy 核心 JAR(如
groovy-4.0.11.jar),提供Script、GroovySystem等运行时支持。
示例(Linux/macOS):
# 先编译 groovyc Hello.groovy # 再用 java 运行(注意替换为你的实际 Groovy JAR 路径) java -cp "/opt/groovy/lib/groovy-4.0.11.jar:." Hello
? 注意事项:
- Windows 用户请用分号分隔 classpath:
java -cp "C:\groovy\lib\groovy-4.0.11.jar;." Hello - 不要省略
.,否则 JVM 找不到Hello.class - 若使用 SDKMAN! 或 Homebrew 安装 Groovy,可通过
groovy --version查看安装路径,再定位lib/目录下的 JAR - 更推荐开发阶段直接用
groovy Hello.groovy—— 简洁、高效、免编译;仅在需与 Java 项目集成或构建发布包时才使用groovyc+java
? 总结:groovy 是脚本解释器,groovyc 是编译器,二者协同但不可混用输入类型。理解这一分工,可避免绝大多数入门级执行错误。

















