
Groovy 的 groovy 命令用于直接执行 .groovy 脚本,而 groovyc 编译生成的 .class 文件是标准 JVM 字节码,不能用 groovy 命令运行;必须通过 java 命令配合 Groovy 运行时库(如 groovy-x.x.x.jar)启动。
groovy 的 `groovy` 命令用于直接执行 `.groovy` 脚本,而 `groovyc` 编译生成的 `.class` 文件是标准 jvm 字节码,不能用 `groovy` 命令运行;必须通过 `java` 命令配合 groovy 运行时库(如 `groovy-x.x.x.jar`)启动。
当你执行 groovyc Hello.groovy 时,Groovy 编译器会将脚本编译为符合 JVM 规范的字节码,并生成 Hello.class(注意:它实际是一个继承自 groovy.lang.Script 的类,而非普通 Java 类)。此时若错误地使用 groovy Hello.class,Groovy 解释器会尝试将该二进制文件当作 Groovy 源码解析——导致读取乱码(如 `)、解析失败,并抛出MultipleCompilationErrorsException`。
✅ 正确做法是:用 java 命令运行编译后的类,但需确保 Groovy 运行时库在类路径(-cp)中,因为 Hello.class 依赖 groovy.lang.Script 等核心类:
# 示例:假设 Groovy 4.0.11 已安装,jar 路径为 ~/groovy-4.0.11/lib/groovy-4.0.11.jar java -cp "~/groovy-4.0.11/lib/groovy-4.0.11.jar:." Hello
⚠️ 注意事项:
-
:是 Linux/macOS 类路径分隔符(Windows 使用;); -
.表示当前目录,确保Hello.class在当前工作目录; - 不要加
.class后缀——java命令只接受类名(如Hello),而非文件名; - 若使用系统包管理器安装(如
apt install groovy),可通过groovy -version和dirname $(dirname $(readlink -f $(which groovy)))查找 Groovy 安装根目录,再定位lib/groovy-*.jar; - 更推荐的开发方式:直接用
groovy Hello.groovy运行脚本(无需编译),或使用构建工具(Gradle/Maven)统一管理依赖与执行流程。
? 总结:groovy 是脚本执行器,groovyc 是编译器,二者职责分离;.class 文件属于 JVM 层,应交由 java 启动,且必须显式提供 Groovy 运行时支持。理解这一分层逻辑,可避免常见“Unexpected character”类错误。










