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

如何将本地依赖打包进Gradle构建的Jar?解决模块发布依赖缺失问题

解决Maven-Publish发布Client后依赖Shared找不到的问题

这个问题我碰到过好多次了——本质就是你本地开发用的compile project(':shared')这种项目依赖,在发布Client之后生成的POM文件里,依然指向本地项目路径,而不是一个可被仓库解析的坐标,所以依赖Client的项目自然找不到Shared。下面是具体的解决步骤:

1. 先把Shared项目发布到仓库(本地/私有)

要让Client的依赖能被下游项目解析,首先得让Shared本身成为仓库里的可依赖构件。给Shared项目配置maven-publish插件:

在Shared的build.gradle里添加如下配置:

plugins {
    id 'java'
    id 'maven-publish'
}

// 给Shared定义唯一坐标,替换成你自己的
group 'com.yourteam'
version '1.0.0'

publishing {
    publications {
        mavenJava(MavenPublication) {
            // 基于Java组件发布,会自动包含编译产物和POM
            from components.java
        }
    }
    repositories {
        // 先发布到本地Maven仓库测试,后续可以换成私有仓库
        mavenLocal()
        // 如果用私有仓库,取消下面注释并配置
        // maven {
        //     url = uri('https://your-private-repo-url.com')
        //     credentials {
        //         username = 'your-repo-username'
        //         password = 'your-repo-password'
        //     }
        // }
    }
}

配置好后,执行命令发布Shared:

./gradlew publishToMavenLocal

(如果是发布到私有仓库,执行./gradlew publish即可)

2. 修改Client项目的依赖方式

把Client里原来的本地项目依赖,改成引用Shared的仓库坐标:

替换Client的build.gradle里的依赖声明:

// 原来的本地依赖
// compile project(':shared')

// 改成仓库坐标依赖,和你给Shared定义的一致
implementation 'com.yourteam:shared:1.0.0'

这样本地开发时,Gradle会自动从本地仓库拉取Shared;发布Client时,生成的POM文件里会包含正确的依赖坐标,下游项目就能正常解析了。

3. 确保Client的Maven-Publish配置正确

最后给Client也配置好maven-publish,保证发布的产物和POM符合规范:

在Client的build.gradle里添加:

plugins {
    id 'java'
    id 'maven-publish'
}

// 给Client定义自己的坐标
group 'com.yourteam'
version '1.0.0'

dependencies {
    implementation 'com.yourteam:shared:1.0.0'
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
    repositories {
        mavenLocal()
        // 同样配置私有仓库如果需要
    }
}

执行命令发布Client:

./gradlew publishToMavenLocal

你可以去Client的build/publications/mavenJava/pom-default.xml里查看生成的POM,里面应该有一个指向com.yourteam:shared:1.0.0的<dependency>节点,而不是本地项目路径。

额外说明:如果不想发布Shared怎么办?

如果因为某些原因不能发布Shared,你可以用Shadow插件把Shared的代码打包进Client的Jar里(即Fat Jar),但这种方式不推荐——因为如果下游项目也依赖Shared,会导致重复依赖问题。如果一定要这么做,需要配置Shadow插件并在发布时指定Shadow Jar作为发布产物,不过优先推荐前面的仓库依赖方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:01:23