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

运行Gradle生成的Jar包时如何让Apache Derby数据库正常工作

该需求完全可实现,以下是两种符合要求的低复杂度解决方案:

方案一:构建单文件可执行胖Jar(最推荐)

该方案会将Derby驱动、JavaFX相关依赖等所有运行所需资源全部打包到同一个Jar文件中,部署仅需传递单个文件,用户无需额外操作即可直接运行。

配置步骤

  1. 在build.gradle中引入shadow打包插件,添加依赖配置:
plugins {
    // 保留你已有的插件,比如java、application、javafx等
    id 'com.github.johnrengelman.shadow' version '7.1.2'
}

dependencies {
    // 保留已有的JavaFX等其他依赖
    // 添加嵌入式Derby核心依赖
    implementation 'org.apache.derby:derby:10.15.2.0'
}
  1. 配置shadowJar打包参数:
shadowJar {
    mergeServiceFiles() // 必加,处理JDBC驱动的SPI注册配置,避免驱动加载失败
    manifest {
        attributes 'Main-Class': '替换为你自己的主类全限定名,例如com.xxx.MyApplication'
    }
}

// 可选配置:执行build命令时自动生成胖Jar
build.dependsOn shadowJar
  1. 执行构建命令:
    Linux/macOS执行:./gradlew build
    Windows执行:gradlew.bat build
    构建完成后,build/libs目录下后缀带-all的Jar文件就是最终可部署文件,拷贝到任意安装了兼容版本JRE的设备上,直接运行即可。
方案二:主Jar与依赖分离部署(符合指定文件夹存放要求)

如果不需要单文件部署,可将所有依赖Jar统一放到lib文件夹下,和主Jar同目录即可,部署时只需将主Jar和lib文件夹一同传递给用户。

配置步骤

在build.gradle中添加如下配置:

// 自动将所有运行时依赖复制到build/libs/lib目录
task copyRuntimeLibs(type: Copy) {
    from configurations.runtimeClasspath
    into "${buildDir}/libs/lib"
}

jar {
    manifest {
        attributes(
            'Main-Class': '替换为你自己的主类全限定名',
            'Class-Path': configurations.runtimeClasspath.files.collect { "lib/${it.name}" }.join(' ')
        )
    }
    dependsOn copyRuntimeLibs
}

执行构建命令后,build/libs目录下会生成主Jar文件和lib文件夹,部署时将二者放在同一目录下,用户直接运行主Jar即可,无需手动配置类路径。

常见注意事项
  • 若打包后仍提示驱动类找不到,优先检查Derby依赖是否正确添加,以及胖Jar配置中是否遗漏了mergeServiceFiles()配置项,JDBC4及以上版本的驱动依赖SPI服务注册,缺省该配置会导致驱动类存在但无法被识别
  • 部署到其他设备时,确保目标设备安装的JRE版本与编译使用的JDK版本兼容,Derby 10.15及以上版本需要JDK11及以上运行环境支持

内容的提问来源于stack exchange,提问作者Jacob Bernard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 20:12:02