通过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"

相关推荐
AI探索者12 小时前
LangGraph StateGraph 实战:状态机聊天机器人构建指南
python
AI探索者12 小时前
LangGraph 入门:构建带记忆功能的天气查询 Agent
python
FishCoderh14 小时前
Python自动化办公实战:批量重命名文件,告别手动操作
python
躺平大鹅14 小时前
Python函数入门详解(定义+调用+参数)
python
曲幽15 小时前
我用FastAPI接ollama大模型,差点被asyncio整崩溃(附对话窗口实战)
python·fastapi·web·async·httpx·asyncio·ollama
两万五千个小时19 小时前
落地实现 Anthropic Multi-Agent Research System
人工智能·python·架构
哈里谢顿21 小时前
Python 高并发服务限流终极方案:从原理到生产落地(2026 实战指南)
python
用户8356290780511 天前
无需 Office:Python 批量转换 PPT 为图片
后端·python
markfeng82 天前
Python+Django+H5+MySQL项目搭建
python·django
GinoWi2 天前
Chapter 2 - Python中的变量和简单的数据类型
python