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

如何将一个Gradle项目的制品作为资源引入另一个同级Gradle项目?

同级Gradle项目构建联动方案

核心实现思路

无需调整现有同级目录结构,也不用复合构建,直接在ServerApp的构建脚本中定义任务依赖+文件复制逻辑,就能实现构建ServerApp时自动触发ClientJAR的bootJar构建,并将产物嵌入ServerApp资源中。

具体配置(ServerApp/build.gradle)

// 任务1:触发ClientJAR的bootJar构建
task buildClientJar(type: Exec) {
    // 根据系统选择对应的gradlew脚本
    def gradlewScript = System.getProperty('os.name').toLowerCase().contains('windows') 
        ? '../ClientJAR/gradlew.bat' 
        : '../ClientJAR/gradlew'
    commandLine = [gradlewScript, 'bootJar']
    // 确保清理任务完成后再执行该任务
    mustRunAfter clean
}

// 任务2:将ClientJAR的bootJar产物复制到ServerApp资源目录
task copyClientJarToResources(type: Copy) {
    // 源路径:ClientJAR的bootJar输出目录
    from '../ClientJAR/build/libs/'
    // 匹配Spring Boot生成的bootJar制品(可根据实际命名调整规则)
    include '*-boot.jar'
    // 目标路径:ServerApp的构建资源目录,会被打包进最终产物
    into "$buildDir/resources/main/static/client"
    // 依赖buildClientJar,确保先构建ClientJAR再复制
    dependsOn buildClientJar
}

// 让ServerApp的资源处理任务依赖复制任务,构建时自动执行
processResources.dependsOn copyClientJarToResources

验证与使用

  1. 执行ServerApp构建命令:
cd ServerApp
./gradlew build

此时会自动完成流程:ClientJAR的bootJar构建 → 产物复制到ServerApp资源目录 → ServerApp自身构建打包。

  1. 产物访问:
    复制后的ClientJAR会被打包进ServerApp的Spring Boot JAR中,放在static/client路径下,可通过ServerApp的HTTP端点(比如GET /client/[文件名].jar)提供下载。

补充优化点

  • 精确匹配制品:如果ClientJAR的bootJar有固定命名,可将include '*-boot.jar'改为具体文件名(如include 'ClientJAR-v1.0.0-boot.jar'),避免匹配多余文件。
  • 跳过ClientJAR构建:本地调试时若无需重新构建ClientJAR,可添加参数跳过:
./gradlew build -x buildClientJar

内容的提问来源于stack exchange,提问作者E-Riz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:27:38