gradle发布代码到maven中央仓库

news/2024/5/20 1:53:48 标签: github, maven, gradle

gradle发布代码到maven中央仓库

    • 环境
    • github
    • Sonatype JIRA
      • 注册sonatype账号
      • 创建一个新的项目票据
    • 创建密钥
      • 下载密钥工具
      • 新建密钥
      • 设置密钥
        • 设置密钥的密码并生成吊销证书妥善保存
      • 导出私钥和公钥
      • 将密钥上传到公共密钥服务器
    • 项目配置
      • 创建全局变量配置
    • 编译脚本
    • 管理和发版
    • 发布到release
      • close仓库
      • release
    • 项目中验证结果

想把自己写的一些代码发布到maven中央仓库,避免来回拷贝代码的步骤,百度了几篇文章照着做发现描述的不完整,要不就是在gradlemaven的方式搞提交的,但是一些配置在gradle里根本不需要,着实浪费时间,所以特在此记录一下我的操作步骤,希望能节省大家的时间。
发布到中央仓库有两个不同的选择:1.使用自己的域名(需要做域名验证)步骤较多,2.使用自己的github,考虑到大家不是都有域名这里选择github方式,步骤少。

环境

组件版本
Windows10
IDEA2020.3
Gradle6.4.1
Kleopatra gpg4win3.1.16

需要github账号

需要一个邮箱账号后面接受各种通知信息使用,比如outlook、qq、163邮箱应该都可以,我这里使用的outlook。

注:整个过程不需要连外网,不过在上github可能会慢一些,影响不大

github_19">github

需要先到github上创建一个公共仓库(public repository),这是是要绑定到maven上的,仓库名字什么的没要求。

但是你提交到maven中央仓库的并不是你github上的内容而是你本地的东西。

Sonatype JIRA

中央仓库是Sonatype公司出资维护的,所以我们的发布流程跟它就有很多的关系。

注册sonatype账号

https://issues.sonatype.org/secure/Dashboard.jspa

注册一个账号,登录。

注册
在这里插入图片描述

创建一个新的项目票据

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
输入完毕没有问题后,点击模态框右下角的“新建”按钮。

然后你会收到一份来自issues@sonatype.org的邮件。
内容如下:
就是说你成功创建了一个票据。
在这里插入图片描述

第二封邮件

在这里插入图片描述
按照指示操作即可。

创建完github仓库后回到票据回复下,如果长时间没有得到回复重新编辑下票据也行,就在描述里面随便输入些内容再提交就可以。
在这里插入图片描述
在这里插入图片描述

第三封邮件
收到如下内容的邮件表示票据已经解决,可以进行下个流程了。

在这里插入图片描述


创建密钥

需要pgp密钥才能把项目发布的中央仓库。

下载密钥工具

这个是Windows平台下面的gpg密钥工具,mac的朋友请自行找可用的工具。

https://files.gpg4win.org/gpg4win-3.1.16.exe

新建密钥

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

设置密钥

在这里插入图片描述
打开最下面的“细节”。

设置密钥的密码并生成吊销证书妥善保存

在这里插入图片描述

导出私钥和公钥

在这里插入图片描述
在这里插入图片描述

将密钥上传到公共密钥服务器

这个是必需的,因为sonatype最后是要到公共密钥服务器上检测密钥的,不然会在发布release版本的时候失败。

在这里插入图片描述

gpg --keyserver https://keys.openpgp.org --recv-keys 密钥指纹

发送中gpg: sending key 38DA5552E8887423 to https://keys.openpgp.org

命令执行后你会收到一封密钥验证邮件

在这里插入图片描述
点击链接发送验证密钥邮件
在这里插入图片描述

接着会收到验证邮件

在这里插入图片描述
在这里插入图片描述
好了,密钥这边已经Ok.


项目配置

在这里插入图片描述

创建全局变量配置

配置gradle.properties

ossrhUsername=asdf  // sonatype username
ossrhPassword=Sonatypeuserpwd // sonatype 密码

signing.keyId=WW1A82WW   // 密钥指纹的最后8位
signing.password=reeee21 // 设置的密钥密码
signing.secretKeyRingFile=fishking_0xWW1A82WW_SECRET.gpg // gpg私钥的路径

编译脚本

build.gradle

plugins {
    id 'java'
    id 'maven' // 为了产生pom.xml文件
    id 'signing'  // 组件签名插件
}

//  组 和 版本配置
group = "io.github.wangxxxxxx"
archivesBaseName = "commons"
version = "0.0.1"
// 编译版本和编码配置
sourceCompatibility = 1.8

compileJava {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    [compileJava]*.options*.encoding = 'UTF-8'
}
compileTestJava {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    [compileTestJava]*.options*.encoding = 'UTF-8'
}

// 跳过所有文件的编译测试;不是跳过compileTestJava task 而是在执行该task的时候,跳过所有的测试文件
test {
    exclude '**/*.class'
}

repositories {
    mavenCentral()
}

dependencies {
// 这些依赖可以不要
    compile 'org.slf4j:slf4j-api:1.7.25'
    testCompileOnly 'junit:junit:4.12'
    testCompileOnly 'org.apache.commons:commons-lang3:3.8.1'
    testCompileOnly 'ch.qos.logback:logback-core:1.1.7'
    testCompileOnly 'ch.qos.logback:logback-classic:1.1.7'
    testCompileOnly 'org.apache.commons:commons-csv:1.6'
}

//对于典型的 Java 项目,您可以添加一个javadocJar以及一个 sourcesJar任务
task javadocJar(type: Jar) {
    classifier = 'javadoc'
    from javadoc
}

task sourcesJar(type: Jar) {
    classifier = 'sources'
    from sourceSets.main.allSource
}
// javadoc 配置,这里是自定义了 java doc 的一些配置
javadoc {
    description = "Generates project-level javadoc for use in -javadoc jar"

    options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
    options.author = true
    options.version = true
    options.header = project.name
    options.addStringOption('Xdoclint:none', '-quiet')

    // suppress warnings due to cross-module @see and @link references;
    // note that global 'api' task does display all warnings.
    logging.captureStandardError LogLevel.INFO
    logging.captureStandardOutput LogLevel.INFO // suppress "## warnings" message
    options.encoding = "UTF-8"  //编码一定要配置否则直接出错
    options.charSet = 'UTF-8'
}
// 并将它们与项目 jar 本身一起连接到 artifacts 集合中:
artifacts {
    archives javadocJar, sourcesJar
}
// 将构建的包签名
signing {
    sign configurations.archives
}
//元数据定义和上传︎
uploadArchives {
    repositories {
        mavenDeployer {
            beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

            repository(url: "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") {
                authentication(userName: ossrhUsername, password: ossrhPassword)
            }

            snapshotRepository(url: "https://s01.oss.sonatype.org/content/repositories/snapshots/") {
                authentication(userName: ossrhUsername, password: ossrhPassword)
            }

            pom.project {
                name 'Example Application'
                packaging 'jar'
                // optionally artifactId can be defined here
                description "A application used as an example on how to set up pushing  its components to the Central Repository."
                url 'http://www.example.com/example-application'

                scm {
                    connection 'scm:svn:http://foo.googlecode.com/svn/trunk/'
                    developerConnection 'scm:svn:https://foo.googlecode.com/svn/trunk/'
                    url 'http://foo.googlecode.com/svn/trunk/'
                }

                licenses {
                    license {
                        name 'The Apache License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }

                developers {
                    developer {
                        id 'manfred'
                        name 'Manfred Moser'
                        email 'manfred@sonatype.com'
                    }
                }
            }
        }
    }
}


在这里插入图片描述
在这里插入图片描述
输出上面的日志表示上传成功。

管理和发版

进入到 nexus repository manager

https://s01.oss.sonatype.org/#view-repositories

右上角Log In,输入Sonatype的账号和密码。

在这里插入图片描述
可以在自己的仓库看到了上传的东西。
uploadArchives之后我们的东西上传到了staging仓库里面。
在这里插入图片描述
staging实际算是我们的待发布仓库。

发布到release

close仓库

close实际是检测仓库的一个过程,检测没问题才可以发布。

在staging仓库里面选择要发布的那个,然后点击上面的close
在这里插入图片描述
此时可以在activity里面看到验证和构建过程。

在这里插入图片描述
在这里插入图片描述
输出Repository closed则表示没问题。

下面就是要release仓库了。

release

release就是将仓库发布到maven中央仓库,这也是我们要做的最后一步。
在这里插入图片描述

release之后我们会收到一封report邮件。
在这里插入图片描述
此时我们已经可以在中央仓库搜索到我们提交的东西了。

在这里插入图片描述
可以看到是release版本。
可以在项目中引入这个库了。


项目中验证结果

maven中央仓库同步到国内的源是需要时间的,要保证项目里maven中央仓库的优先级在上面。

    repositories {
        mavenLocal()
        
        maven {
            url = uri('https://repo1.maven.org/maven2/')
        }
        maven {
            url = uri('https://maven.aliyun.com/repository/public')
        }
	}

引入依赖

implementation group: 'io.github.wangxvdong', name: 'commons', version: '0.0.2'

在这里插入图片描述



http://www.niftyadmin.cn/n/1307391.html

相关文章

springboot Activiti6

springboot Activiti6流程建模需要下载设计工具Activiti6.0 UI运行设计工具登录页流程图效果BPMN2.0构件起点结束活动流程线网关变量设置画不同拐角的流程线导出BPMN2.0文件流程开发导入BPMN2.0文件部署BPMN依赖配置数据源配置activiti配置表结构解决依赖冲突确定前端流程每个节…

springcloud feign 传递map 对象 多媒体文件

Spring cloud 通过feign 可以来调用其他微服务的api具体用法 EnableFeignClients // 开启fegin客户端 SpringBootApplication public class MongodbApiApplication { publicstaticvoid main(String[] args) { SpringApplication.run(MongodbApiApplication.class, args); } …

springboot下生成复杂word文档方案 在Word软件里面制作模板

系列文章目录 第二章:根据模板导出word,复合格式表格生成、可变列表格生成 第三章:doc和docx插入多图 第四章:web环境下word文档预览 springboot freemarker 生成复杂word系列文章目录代码仓库1. 制作word模板1.1 制作一个word文…

根据模板导出word,复合格式表格生成、可变列表格生成

系列文章目录 第一章:springboot下生成复杂word文档方案 在Word软件里面制作模板 第三章:doc和docx插入多图 第四章:web环境下word文档预览 根据模板导出word,复合格式表格生成、可变列表格生成系列文章目录前言复合格式表格一、…

word文档生成系列:doc和docx插入多图

系列文章目录 第一章:springboot下生成复杂word文档方案 在Word软件里面制作模板 第二章:根据模板导出word,复合格式表格生成、可变列表格生成 第三章:doc和docx插入多图 第四章:web环境下word文档预览 文章目录系列文…

从ELK认识docker-compose

系列文章目录 CentOS Docker 安装并用阿里云加速 docker安装Elasticsearch以及分词器 部署Elasticsearch下篇:安装Kibana Elastic Stack之日志收集 从ELK认识docker-compose系列文章目录前言docker compose 的使用场景什么场景不适合使用docker compose一、dock…

springboot 多任务并行执行

ComponentScan(basePackages { "com.meadin.agent" }) EnableApolloConfig EnableAsync // 开启多任务 public class BwStudyApplication {public static void main(String[] args) {SpringApplication.run(BwStudyApplication.class, args);} } 配置线程池的参数 …

设计模式---状态模式

1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理。最直接的解决方案是将这些所有可能发生的情况全都考虑到。然后使用if... ellse语句来做状态判断来进行不同情况的处理。但是对复杂状态的判断就显得“力不从心了”。随着增加新的状态或者修改…