当前位置: 首页 > news >正文

MavenCentral库发布记录

最近发布了 Android 路由库 URouter,支持 AGP8、ActivityResult启动等特性。
把提交到 Maven Central 过程记录一下。

一、注册 Sonatype 账号,新建项目

注册
https://​​issues.sonatype.org

登录后,新建项目:

相关选项,选择:

  • 项目:Community Support - Open Source Project - Repository Hosting (OSSRH)
  • 类型:New Project
  • 概要:填写 Git 项目名即可
  • Group Id: Github项目,io.github.xxx 用户名
  • Project URL: 填写 github 项目主页
  • SCM url: 填 github项目地址 + .git

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

点击提交后,等待 3-5分钟 回复,验证 github 所有权。

  • 在自己项目里,在 github 创建 回复的 仓库
  • 创建完成后,回复评论,大概意思就是即可: 仓库已创建

在这里插入图片描述

等待5-10分钟后,验证成功

这时候,就有上传到 sonatype nexus 仓库权限了

二、准备 GPG 密钥

GPG 来生成 密钥,安装 GPG
Windows下使用scoop安装:

scoop install gpggpg --generate-keygpg --list-keys

这里获取到pub公钥,

在这里插入图片描述

创建完成,–list-keys 显示 pub 第二方 一串:
67E95C8F2931C822********************F7E9
后面用于 上传和验证 公钥

上传公钥

gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 
67E95C8F2931C822********************F7E9# 验证是否上传功能,后 8 位即可
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys ****F7E9

导出密钥,后面签名用

gpg --export-secret-keys 67E95C8F2931C822********************F7E9 > secret.gpg

三、Gradle项目配置

本地发布和远程发布,需要 maven-publish 插件,
GPG为了签名,需要 signing 插件。项目模块 build.gradle 配置:

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

添加后,gradle 就多了 publish 任务:

在这里插入图片描述

配置发布

添加maven-publish后,开始配置 publishing 代码块

// 配置发布后 groupId,默认 artifactId 是项目模块名
group = 'org.example'
version = '1.0'task sourcesJar(type: Jar) {classifier = 'sources'from sourceSets.main.allSource
}task javadocJar(type: Jar) {classifier = 'javadoc'from javadoc.destinationDir
}publishing {publications {release(MavenPublication) {// 配置POM信息pom {name = project.namedescription = 'xxx'url = 'https://github.com/xxx/xxx'// 开源协议licenses {license {name = 'The Apache License, Version 2.0'url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'}}// 配置开发者信息developers {developer {id = 'xxx'name = 'xxx'email = 'xxx@163.com'}}// scmscm {connection = 'https://github.com/xxx/xxx.git'developerConnection = 'https://github.com/xxx/xxx.git'url = 'https://github.com/xxx/xxx'}}// 发布文档 JARartifact javadocJar// 发布源码 JARartifact sourcesJarfrom components.java}}repositories {maven {url "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"credentials {                username project.sonaUsername // sonatype usernamepassword project.sonaPassword // sonatype password}}}
}signing {sign publishing.publications.release
}

配置 sonatype 账号 和 GPG密钥

上面配置,还不能直接使用,在 gradle.properties 配置用到的 变量:

对于密码信息,可以放到 用户目录下的 gradle.properties,
Windows下是:

C:\Users\用户名\.gradle\gradle.properties

添加 账号信息:

# sonatype 账号信息
sonaUsername=xxxx
sonaPassword=xxxx
# GPG Signing Info
signing.keyId=XXXXXXXX
signing.password=xxxxxx
# 上面导出的 GPG 密钥路径
signing.secretKeyRingFile=C:\\Users\\username\\.gpg\\secret.gpg

四、发布到仓库

项目下执行命令进行发布:

.\gradlew.bat publish

发布成功后,进入 snoatype nexus 后台,管理发布:
https://s01.oss.sonatype.org/#stagingRepositories

在这里插入图片描述

  1. 在 Staging Repositories,勾选发布的仓库,点击Close并确定
  2. 稍等几分钟,验证通过,点 Release
  3. 10-30分钟后,会在 Maven Central 同步更新
  • 可在 https://mvnrepository.com/ 搜索查看库

文档

  • Android 发布: https://developer.android.com/build/publish-library/upload-library
  • https://blog.51cto.com/u_12853553/5896541

相关文章:

MavenCentral库发布记录

最近发布了 Android 路由库 URouter,支持 AGP8、ActivityResult启动等特性。 把提交到 Maven Central 过程记录一下。 一、注册 Sonatype 账号,新建项目 注册 https://​​issues.sonatype.org 登录后,新建项目: 相关选项&…...

小程序进阶-env(safe-area-inset-bottom)的使用

一、简介 env(safe-area-inset-bottom)和env(safe-area-inset-top)是CSS中的变量,用于获取设备底部和顶部安全区域的大小。 所谓的安全区域就是指在iPhone X及以上的设备中,为避免被屏幕的“刘海”和“Home Indicator”所遮挡或者覆盖的有效区域区域&am…...

移动端App持续集成体系构建实战

这里写目录标题 一、目标1、前言2、优势:3、涉及技术点4、目标 二、测试app构建、打包过程1、安卓打包的环境要求 三、演示安卓源码打包四、演示安卓App部署1、前提条件2、命令控制apk安装与卸载 五、安卓UI自动化测试1、Appium app自动化测试-Python2、实现的验证点…...

Mybatis的关联关系配置一对一,一对多,多对多的映射关系

目录 关联关系映射 一对一关联: 一对多关联: 多对多关联: 导入数据库表 一对多 一对一 多对多 关联关系映射 关联关系映射在Mybatis中主要通过三种方式实现:一对一关联和一对多关联及多对多关联。 一对一关联:…...

计算机竞赛 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类

文章目录 1 前言2 情感文本分类2.1 参考论文2.2 输入层2.3 第一层卷积层:2.4 池化层:2.5 全连接softmax层:2.6 训练方案 3 实现3.1 sentence部分3.2 filters部分3.3 featuremaps部分3.4 1max部分3.5 concat1max部分3.6 关键代码 4 实现效果4.…...

时序预测 | MATLAB实现CNN-BiGRU卷积双向门控循环单元时间序列预测

时序预测 | MATLAB实现CNN-BiGRU卷积双向门控循环单元时间序列预测 目录 时序预测 | MATLAB实现CNN-BiGRU卷积双向门控循环单元时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现CNN-BiGRU卷积双向门控循环单元时间序列预测; 2.运行环境…...

[Rust GUI]0.10.0版本iced代码示例 - progress_bar

-1 字体支持 iced0.10.0 仅支持指定系统内置字体(iced默认字体中文会乱码) iced0.10.0 手动加载字体的功能已经砍了,想手动加载就用0.9.0版本,文档0.9.0版本 想显示中文则需要运行在一个自带字体的Windows系统上。而且这个字体最好不要钱。 (Windows闲着…...

使用vue-pdf出现的卡顿,空白,报错,浏览器崩溃解决办法

如果想直接知道解决办法,请翻到最下面 今天,接到了一个新的需求,我们公司的PDF展示卡住了,导致浏览器直接奔溃。我也刚来公司不久,就去看看是怎么发生的,公司前同事用的vue-pdf,刚开始以为是文…...

(笔记七)利用opencv进行形态学操作

(1)程序清单 形态学操作是一种图像处理技术,它基于数学形态学理论,用于改变图像的形状和结构。它主要通过结构元素的腐蚀和膨胀操作来实现。 #!/usr/bin/env python # -*- coding:utf-8 -*- """ author: LIFEI t…...

Spring是什么?

什么是Spring 我知道你现在可能迫不及待地想要开始编写Spring应用了。我向你保证,在本章结束之前,你肯定能够开发一个简单的Spring应用。但首先,我将使用Spring的一些基础概念为你搭建一个舞台,帮助你理解Spring是如何运转起来的…...

电梯SIP-IP五方对讲管理系统

电梯SIP-IP五方对讲管理系统 是深圳锐科达精心打磨的一款IP数字信号对讲设备,是在传统电梯对讲系统基础上的一次全新升级,突破了模拟、FM调频系统存在的技术障碍,实现联网;在模/数交替的过程中,继承了模拟、FM调频系统的优点&…...

leetcode283移动零

题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入:…...

Docker 部署SpringBoot项目,使用外部配置文件启动项目

一、Springboot项目引入配置文件的方式: 第一种是在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹下; 第二种是直接把配置文件放到jar包的同级目录; 第三种在classpath下建一个config文件夹,然后…...

电子半导体行业电能质量监测与治理系统解决方案 安科瑞 许敏

摘要:在国家鼓励半导体材料国产化的政策导向下,本土半导体材料厂商不断提升半导体产品技术水平和研发能力,逐渐打破了国外半导体厂商的垄断格局,推进中国半导体材料国产化进程,促进中国半导体行业的发展。半导体产品的…...

pdfh5在线预览pdf文件

前言 pc浏览器和ios的浏览器都可以直接在线显示pdf文件&#xff0c;但是android浏览器不能在线预览pdf文件&#xff0c;如何预览pdf文件&#xff1f; Github: https://github.com/gjTool/pdfh5 Gitee: https://gitee.com/gjTool/pdfh5 使用pdfh5预览pdf 编写预览页面 <…...

Java智慧工地大数据中心源码

智慧工地技术架构&#xff1a;微服务JavaSpring Cloud VueUniApp MySql 智慧工地形成安全、质量、进度、人员、机械、绿色施工六大针对性解决方案。 安全管理 围绕重大危险源提供管控&#xff0c;可视化跟踪消防、安防、基坑、高支模、临边防护、卸料平台等设施设备的安全状态…...

关于人工智能的担忧

人工智能的快速发展引发了一系列关于其潜在风险和担忧的讨论。以下是一些常见的人们对人工智能的担忧&#xff1a; 失业问题&#xff1a;人工智能的出现可能会导致很多工作岗位的消失&#xff0c;特别是那些需要重复性劳动的工作。人们担心机器取代人类工作将导致大规模失业和社…...

JVM之强软弱虚引用

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;有几种不同类型的引用&#xff0c;它们分别是&#xff1a;强引用&#xff08;Strong Reference&#xff09;、软引用&#xff08;Soft Reference&#xff09;、弱引用&#xff08;Weak Reference&#xff09;、虚引用&am…...

Python编程练习与解答 练习98:一个数是素数吗

质数是大于1的整数&#xff0c;它只能被1和它本身整除。编写一个函数&#xff0c;来确定他的参数是不是质数&#xff0c;如果是&#xff0c;则返回True&#xff0c;否则返回False。编写一个main程序&#xff0c;从用户那里读取一个整数并显示一条消息&#xff0c;指示它是不是质…...

vue3+ts+uniapp实现小程序端input获取焦点计算上推页面距离

vue3tsuniapp实现小程序端input获取焦点计算上推页面距离 input获取焦点计算上推页面距离 1.先说我这边的需求2.发现问题3.解决思路4.代码展示 自我记录 1.先说我这边的需求 需求 1.给键盘同级添加一个按钮例如’下一步’ or ‘确认’ 这种按钮 2.初步想法就是获取input焦点时…...

【2023集创赛】加速科技杯二等奖作品:基于ATE的电源芯片测试设计与性能分析

本文为2023年第七届全国大学生集成电路创新创业大赛&#xff08;“集创赛”&#xff09;加速科技杯二等奖作品分享&#xff0c;参加极术社区的【有奖征集】分享你的2023集创赛作品&#xff0c;秀出作品风采&#xff0c;分享2023集创赛作品扩大影响力&#xff0c;更有丰富电子礼…...

Java入坑之Robot类

一、概述 1.1Robot类概述 在Java中&#xff0c;Robot是一个属于java.awt包的类。它还扩展了 Object 类。该类用于为测试自动化、自运行演示以及需要控制鼠标和键盘的其他应用程序生成本机系统输入事件。换句话说&#xff0c;我们使用 Java Robot 类来触发输入事件&#xff0c;…...

spring-secrity的Filter顺序+自定义过滤器

Filter顺序 Spring Security的官方文档向我们提供了filter的顺序&#xff0c;实际应用中无论用到了哪些&#xff0c;整体的顺序是保持不变的: ChannelProcessingFilter&#xff0c;重定向到其他协议的过滤器。也就是说如果你访问的channel错了&#xff0c;那首先就会在channel…...

leetcode 371. 两整数之和

异或&#xff1a;不同为1&#xff0c;相同为0&#xff0c;刚好符合加法&#xff0c;但是缺少进位的可能 按位与&#xff1a;只有都为1才为1&#xff0c;否则都为0&#xff0c;如果两个数按位与再左移一位&#xff0c;就能代表所有要进位的位 class Solution {public int getS…...

Medium: Where to Define Qualified users in A/B testing?

1. Common AB Testing Setup Issue (Framework) 局限性: unqualified users will also be considered and mess up experimentation results....

POJ 3662 Telephone Lines 二分,最小化第k大的数

一、题目大意 我们有n个点&#xff0c;p条边&#xff0c;最小化从1到n之间的路径的第k1大的数&#xff08;当路径不超过k时就是0&#xff09; 二、解题思路 我们首先用dijkstra过一遍&#xff0c;判断从1能不能到n&#xff0c;不能直接输出-1结束。 1能到达n的话&#xff0…...

【mybatis-plus进阶】多租户场景中多数据源自定义来源dynamic-datasource实现

Springbootmybatis-plusdynamic-datasourceDruid 多租户场景中多数据源自定义来源dynamic-datasource实现 文章目录 Springbootmybatis-plusdynamic-datasourceDruid 多租户场景中多数据源自定义来源dynamic-datasource实现0.前言1. 作者提供了接口2. 基于此接口的抽象类实现自…...

vue3 async await

const getStruct async () > {//首先从store读取&#xff0c;否则通过接口获取if (store.state.struct.v ! null) {return store.state.struct.v;} else {const data await getStructApi();store.dispatch("struct/keepV", data).then(() > {console.log(&qu…...

CLion远程Linux开发环境搭建及找不到Linux头文件的解决方法

CLion远程开发环境搭建及找不到Linux头文件的解决方法 文章目录 CLion远程开发环境搭建及找不到Linux头文件的解决方法1.前言2.远程开发3.远程编译4.远程调试5.远程开发Linux头文件找不到&#xff08;比如pthread.h、<sys/socket.h>&#xff09;6.最后 1.前言 在某些时候…...

Python综合案例(基本地图使用)

一、基本地图的使用 基本代码&#xff1a; """ 演示地图可视化的基本使用 """ from pyecharts.charts import Map from pyecharts.options import VisualMapOpts# 准备地图对象 map Map() # 准备数据 data [("北京", 99),("…...

图片库网站建设/企业邮箱账号

spring boot2.x下 使用feign&#xff0c;注解EnableFeignClients 找不到的解决方法 在spring boot1.x下&#xff0c;使用注解EnableFeignClients&#xff0c;jar包依赖是&#xff1a; <!-- feign远程调用 --><dependency><groupId>org.springframework.cloud…...

做网站类的书本信息/seo查询官方网站

1.首先准备两台主机&#xff0c;一台做服务器&#xff0c;一台做客户机&#xff0c;保证两台能够相互通信服务器IP地址&#xff1a;192.168.4.5客户机IP地址&#xff1a;192.168.4.2052.给服务器配置NFS服务[rootser5 /]# rpm -q nfs-utils rpcbindnfs-utils-1.2.3-39.el6.x86_…...

唐山网站建设正规公司/网站推广软件免费版

本文将介绍如何分组数据&#xff0c;以便能汇总表内容的子集&#xff0c;这涉及两个新SELECT语句子句&#xff0c;分别是 GROUP BY 子句和HAVING子句。 1.1 创建分组 分组是在SELECT语句的GROUP BY子句中建立的。 输入&#xff1a; SELECT vend_id,COUNT(*) AS num_prods FROM …...

福州论坛建站模板/互联网网络推广

函数的使用很简单&#xff0c;直接把 OpenCV 的官方文档截取过来吧&#xff0c;主要是。。。懒了。。。#include <opencv2/opencv.hpp> #include <stdio.h> #include <stdlib.h> #include <iostream>using namespace cv; using namespace std;…...

淮安做网站.哪家网络公司好?/营销策略有哪些方面

1.layout方法 每次移动后&#xff0c;调用layout()方法对自己重新布局从而达到移动的效果 Overridepublic boolean onTouchEvent(MotionEvent event) {int x (int) event.getX();int y (int) event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:// 记录…...

中国建设银行官网首页网站/免费二级域名查询网站

在做ASP.NET的项目中经常会在一个解决方案下包含多个网站或控制台项目或其他项目&#xff0c;如果按默认配置的话——无论你指定哪个项目为启动项然后【F5】都会编译所有解决方案的工程。如果工程浩大&#xff0c;这将是一件非常让人不愉快的事情&#xff0c;今天偶尔来探索了一…...