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

相关推荐
应用市场7 小时前
构建自定义命令行工具 - 打造专属指令体
开发语言·windows·python
东方佑7 小时前
从字符串中提取重复子串的Python算法解析
windows·python·算法
Dfreedom.7 小时前
一文掌握Python四大核心数据结构:变量、结构体、类与枚举
开发语言·数据结构·python·变量·数据类型
一半烟火以谋生7 小时前
Python + Pytest + Allure 自动化测试报告教程
开发语言·python·pytest
pengzhuofan8 小时前
第10章 Maven
java·maven
叶子丶苏8 小时前
第八节_PySide6基本窗口控件_按钮类控件(QAbstractButton)
python·pyqt
百锦再9 小时前
对前后端分离与前后端不分离(通常指服务端渲染)的架构进行全方位的对比分析
java·开发语言·python·架构·eclipse·php·maven
Blossom.1189 小时前
把AI“刻”进玻璃:基于飞秒激光量子缺陷的随机数生成器与边缘安全实战
人工智能·python·单片机·深度学习·神经网络·安全·机器学习
Kratzdisteln10 小时前
【Python OOP Diary 1.1】题目二:简单计算器,改错与优化
python·面向对象编程
小白银子10 小时前
零基础从头教学Linux(Day 53)
linux·运维·python