You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy程序打包为Jar后java.util.Date.format()方法异常求助

问题解决:Groovy打包Jar后Date.format()方法缺失异常

核心原因

Groovy为java.util.Date提供的format(String)方法属于groovy-dateutil扩展模块,该模块通过META-INF/services/org.codehaus.groovy.runtime.ExtensionModule配置文件注册增强方法。打包成可执行Jar时,若未正确包含该配置文件或合并扩展模块信息,JVM无法识别Groovy的动态增强方法,从而抛出MissingMethodException。

解决方案

1. 确认依赖包含groovy-dateutil模块

Groovy 4.x开始,部分扩展模块从核心包中拆分,需显式引入:

  • Gradle依赖配置:
    implementation 'org.codehaus.groovy:groovy-dateutil:4.0.18'
    
  • Maven依赖配置:
    <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-dateutil</artifactId>
        <version>4.0.18</version>
    </dependency>
    

2. 修复IntelliJ打包配置

检查Artifact输出配置,确保扩展模块的配置文件被正确包含:

  • 打开IntelliJ的File > Project Structure > Artifacts
  • 选中你的可执行Jar配置,切换到Output Layout标签
  • 找到groovy-dateutil-4.0.18.jar,展开并确认META-INF/services目录及其下的org.codehaus.groovy.runtime.ExtensionModule文件被包含
  • 若存在多个Jar包含同名配置文件,右键文件选择Merge设置合并策略

3. 临时绕过方案:显式调用扩展方法

若打包配置暂时无法调整,可直接调用Groovy扩展类的静态方法,绕开动态加载机制:

import groovy.time.DateGroovyMethods

static String timestamp() {
    return DateGroovyMethods.format(new Date(), "yyyy-MM-dd HH:mm:ss")
}

4. 使用构建工具打包(推荐)

改用Gradle Shadow或Maven Shade插件打包,它们会自动处理扩展模块的配置文件合并:

  • Gradle Shadow插件示例配置:
    plugins {
        id 'groovy'
        id 'com.github.johnrengelman.shadow' version '8.1.1'
    }
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'org.codehaus.groovy:groovy-all:4.0.18'
        implementation 'org.codehaus.groovy:groovy-dateutil:4.0.18'
    }
    
    shadowJar {
        mergeServiceFiles() // 关键:合并扩展模块配置文件
        manifest {
            attributes 'Main-Class': 'com.yourpackage.MainClass' // 替换为你的主类路径
        }
    }
    
    执行./gradlew shadowJar生成可执行Jar,运行java -jar build/libs/your-project-all.jar即可正常使用扩展方法。

内容的提问来源于stack exchange,提问作者H. Dog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 00:47:34