通过gradle发布aar或jar携带sources-jar到maven nexus

找了很久,没有找到满意的。终于找到一个好的办法。

gradle7.x适用。比以前的写法简洁。

发布传统的jar工程

比如okhttp,fastjson等项目,纯java工程。

  1. 直接创建新文件publish.gradle:
groovy 复制代码
apply plugin: 'maven-publish'

Properties properties = new Properties()
try {
    InputStream inputStream = file('../local.properties').newDataInputStream()
    properties.load(inputStream)
} catch (Throwable ignored) {
    ignored.printStackTrace()
}

def moduleGroupId = findProperty('group.id')
def mavenName = findProperty('maven.name')
def mavenUploadUrl = findProperty('maven.upload.url')
def mavenUploadUsername = properties.getProperty('username')
def mavenUploadPassword = properties.getProperty('password')
def moduleArtifactId = "okhttp"
def moduleVersion = "4.12.0" //记得每次修改

publishing {
    publications {
        create(moduleArtifactId, MavenPublication) {
            from components.java
            groupId "${moduleGroupId}" //看备注
            artifactId "${moduleArtifactId}"
            version "${moduleVersion}"
        }
    }

    repositories {
        maven {
            name = mavenName
            url = mavenUploadUrl
            credentials {
                username = mavenUploadUsername
                password = mavenUploadPassword
            }
        }
    }
}

然后在jar生成工程的build.gradle里面添加:

groovy 复制代码
//补充打包条件
java {
  withJavadocJar()
  withSourcesJar()
}

apply from: "publish.gradle" //引入即可

gradle sync以后,能够得到如下:

点击运行发布。

备注:

其中,groupId "${moduleGroupId}" 是为了公司统一group包名。一些自行新建的仓库如此即可。

但,如果你是想修改某个外部库的源码,传到了公司内部,然后引入使用。最好的办法是注释掉groupId,修改源码,升级版本号即可。这样它会从多个仓库url去取,自然会从你们公司地址取到版本。

注释掉才能保证引入的时候:implement 'com.squareup.okhttp3:okhttp:4.12.0'

这样才不会导致多包问题。

发布aar

android 的aar发布差不多:

脚本文件publish.gradle:

groovy 复制代码
apply plugin: 'maven-publish'

//读取账号和签名信息文件
Properties properties = new Properties()
try {
    InputStream inputStream = file('../local.properties').newDataInputStream()
    properties.load(inputStream)
} catch (Throwable ignored) {
    ignored.printStackTrace()
}
def moduleGroupId = findProperty('group.id')
def mavenName = findProperty('maven.name')
def mavenUploadUrl = findProperty('maven.upload.url')
def mavenUploadUsername = properties.getProperty('username')
def mavenUploadPassword = properties.getProperty('password')
def moduleArtifactId = name

android {
    publishing {
        singleVariant("release") {
            withSourcesJar()
            withJavadocJar()
        }
    }
}

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.release

                groupId = moduleGroupId
                artifactId = moduleArtifactId
                version = moduleVersion
            }
        }

        repositories {
            maven {
                name = mavenName
                url = mavenUploadUrl
                credentials {
                    username = mavenUploadUsername
                    password = mavenUploadPassword
                }
            }
        }
    }
}

引入则:

apply from: ".../gradle/publish.gradle"

相关推荐
天天爱吃肉82188 小时前
【重磅发布:拿下新超仁达代理权 】
大数据·人工智能·python·功能测试·汽车
神王宝宝 王者小学8 小时前
面向领域驱动架构的查询实现方式
前端·python·架构
ningmengjing_9 小时前
Redis 从入门到实战:Python操作全攻略
数据库·redis·python
️学习的小王10 小时前
智能文档助手:基于RAG的本地化文档问答系统实战指南
人工智能·python·机器学习
不瘦80斤不改名10 小时前
05-vibe-coding-向agentic-engineering演进
人工智能·笔记·python·prompt
笨鸟先飞,勤能补拙10 小时前
AI 安全的下一个 5 年:从 Agent 到 AGI 的攻防博弈
人工智能·python·安全·web安全·网络安全·github·agi
Logintern0911 小时前
LangSmith如何根据id关系,在服务端把扁平列表重建为树形结构,用于页面渲染Trace视图
python
月光船幽幽11 小时前
呼吸孔设计重塑系统稳定性
python·科技·算法
Bryce学亮11 小时前
FileLine,基于 Qt 6 + QML 构建的跨平台文件传输与即时通讯工具
数据库·c++·人工智能·python·qt·github