部署到Maven中央存储库

您需要使您的Java库公开访问吗? 您的项目托管在GitHub上吗? 您是否喜欢“将所有功能都部署到Maven Central Repository”按钮的想法? 我将展示如何使用maven-release-plugin进行设置 。 源代码托管在GitHub上,因此还将描述对源代码控制的SSH访问。

为项目设置环境需要采取各种步骤。 我遵循了SonaType官方指南中的许多步骤,因此在需要时会参考它。 但是,本指南还介绍了配置“部署到Maven Central存储库”按钮不需要的许多技术。

考虑

我的第一种方法是创建代表“部署到Maven Central”按钮的Jenkins作业。 对于我来说,这个想法比从我的开发机器推动来的要干净得多。 我几乎没有尝试过,但是当maven-release-plugin将版本更新推送到GitHub时,无法使Jenkins SSH Agent插件注册我的SSH身份。 因此,非常简单的Linux Bash脚本涉及两个步骤。

1.创建SonaType JIRA票证以注册您的groupId

SonaType驱动最大的Nexus存储库之一。 需要先在其中部署Java工件,然后才能将其同步到Maven Central存储库。 为了将Java库发布到SonaType Nexus存储库中,需要JIRA票证。 SonaType指南包含有关如何创建它的详细说明。

选择反映您的顶级域的Maven groupId。 它通常与Java主程序包相同(例如com.google ,而不是com.google.guava )。 这是因为您不想为您的域/主包/ groupId下的每个项目/库创建JIRA票证。 这里是有关Java包命名约定的更多信息。

2.从SonaType OSS pom.xml继承您的Maven工件

SonaType父POM包含

  • SonaType Nexus存储库的URL
  • Maven插件的配置
    • Enforcer插件
<parent><groupId>org.sonatype.oss</groupId><artifactId>oss-parent</artifactId><version>9</version>
</parent>

此父POM的存在很方便,因为否则您将需要在POM中指定所有插件。 唯一的问题是插件版本已过时,因此我决定以这种方式覆盖POM中的某些版本:

<pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-gpg-plugin</artifactId><version>1.5</version></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><version>2.4.2</version></plugin></plugins>
</pluginManagement>

重要版本更新是GPG插件之一,因为更新版本具有有关GPG签名一节所述的便捷功能。

3.配置Maven工件的GPG签名

由于Maven Central存储库的安全策略,因此需要这样做。 包括各个子步骤:

  • 安装GnuPG工具
  • 生成密钥对
  • 分配您的公钥
  • settings.xml (您的本地存储库配置)中设置工件的签名。
<profiles><profile><id>sonatype-oss-release</id><properties><gpg.keyname>F21879F3</gpg.keyname><gpg.passphrase>*********</gpg.passphrase><gpg.defaultKeyring>false</gpg.defaultKeyring><gpg.useagent>true</gpg.useagent><gpg.lockMode>never</gpg.lockMode><gpg.homedir>/home/lkrnac/.gnupg</gpg.homedir><gpg.publicKeyring>/home/lkrnac/.gnupg/pubring.gpg</gpg.publicKeyring><gpg.secretKeyring>/home/lkrnac/.gnupg/secring.gpg</gpg.secretKeyring></properties></profile>
</profiles>

F21879F3是我的公共GPG密钥ID。 gpg –list-keys命令将为您列出它。 Passphase是您的GPG专用密钥的密码。 .gnupg文件夹通常在您的主目录中生成。

4.设置SonaType Nexus存储库的凭据

需要推送到SonaType Nexus存储库。 与SonaType JIRA凭据相同。 再次在settings.xml中

<servers><server><id>sonatype-nexus-snapshots</id><username>lkrnac</username><password>*************</password></server><server><id>sonatype-nexus-staging</id><username>lkrnac</username><password>*************</password></server>
</servers>

6.设置对GitHub的SSH访问

请遵循以下子步骤:

  • 生成新的SSH密钥
  • 将公共SSH密钥添加到GitHub

7.创建“部署到Maven Central”按钮

Maven-release-plugin需要推送/签入版本更新到源代码控制系统并标记修订。 就我而言,代码托管在GitHub上。 因此,在调用maven-release-plugin的目标之前,我需要注册我的SSH身份(在上一步中生成)。 这是通过位于pom.xml旁边的bash脚本maven-central-deploy.sh完成的:

!/bin/bash
# Deploy maven artefact in current directory into Maven central repository 
# using maven-release-plugin goalsread -p "Really deploy to maven cetral repository  (yes/no)? "if ( [ "$REPLY" == "yes" ] ) thenssh-add ~/.ssh/lubos.krnacssh-add -lmvn release:clean release:prepare release:perform -B -e | tee maven-central-deploy.logssh-add -D
elseecho 'Exit without deploy'
fi

使脚本可执行

chmod +x maven-central-deploy.sh

8.按下“部署到Maven Central”按钮

赶紧跑

./maven-central-deploy.sh

确认并根据需要输入SSH私钥通行证。

9.通过SonaType Nexus存储库发布工件

将工件推送到SonaType Nexus存储库时。 您需要释放它 。 最后,您需要在开始创建的SonaType JIRA问题中添加评论,然后等到有人检查您的工件并设置与Maven Central的同步。 当然,JIRA部分仅需要完成一次。

链接

  • 以这种方式配置的示例项目托管在GitHub上 。 (这是很小的测试库)。

参考:在Lubos Krnac Java博客博客上,从我们的JCG合作伙伴 Lubos Krnac 部署到Maven Central Repository 。

翻译自: https://www.javacodegeeks.com/2014/03/deploy-to-maven-central-repository.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scroll Depth – 衡量页面滚动的 Google 分析插件

Scroll Depth 是一个小型的 Google Analytics&#xff08;谷歌分析&#xff09;插件&#xff0c;可以让你衡量用户在页面上滚动了多远。它可以监控 25%、50%、75% 和 100% 四个滚动点&#xff0c;并发送谷歌分析事件。 您还可以跟踪页面上的特定元素是否滚动到视图中。例如在博…

aws ec2时间_AWS中自动化的三大领域,以避免支付过多的云账单

AWS是全球最常用的云服务之一。 Gartner Magic Quadrant将AWS评为最大的IaaS提供商。每个可能的域都由企业使用AWS服务。 全球约有 1,000,000家公司正在使用AWS作为其IaaS提供商。从Netflix到Unilever再到Met Office&#xff0c;每个人都转移到AWS上的云基础架构。既然您正在阅…

linux vector 头文件,LINUX 之Vector用法

在Linux开发过程中常用到的一个功能----列表显示.如何将中心数据进行列表显示呢?这里就用到了VECTOR容器.从中心获取的数据通过VECTOR容器传输给站点程序从而实现批量数据的传输.VECTOR容器常用的函数包括以下几个1.push_back函数函数原型:void push_back(const T& x);实现…

MySQl的一些基本知识(1)

数据库优化操作&#xff1a; MySQL优化 数据库优化维度有四个: 硬件、系统配置、数据库表结构、SQL及索引 优化成本: 硬件>系统配置>数据库表结构>SQL及索引 优化效果: 硬件<系统配置<数据库表结构<SQL及索引 运行机制原理和底层架构 MySQL的查询优化&#x…

将一个word文档按一页或多页拆分成多个文档

工作中&#xff0c;有时候碰到需要将一个比较大的word按照指定的页数分割成若干个小的word文档&#xff0c;下面提供分割的方法供参考&#xff1a; 一、按照单页拆分 1、在Word里面打开那个需要分割的文档&#xff08;假设它的文件名叫做“test.doc”&#xff09;&#xff1b; …

Croppic – 免费开源的 jQuery 图片裁剪插件

Croppic 这款开源的 jQuery 图片裁剪插件能够满足网站开发人员各种不同的使用需要。只需要简单的上传图片&#xff0c;就可以实现你想要的图像缩放和裁剪功能。因为使用了 HTML5 FormData 对象&#xff0c;所以目前只支持 IE 10 、Chrome 和 Firefox 等现代浏览器。 您可能感兴…

应用面向方面的编程

1.引言 面向方面的编程的主要目标是将跨领域的关注点分离。 当我们谈论跨领域的关注时&#xff0c;我们指的是在我们的系统或应用程序中的多个地方使用的通用功能。 这些概念包括&#xff1a; 记录中 交易管理 错误处理 监控方式 安全 实现这种分离的方法是将这些概念模块…

最大连续子序列----DP动态规划

1196: 最大连续子序列 时间限制: 1 Sec 内存限制: 128 MB提交: 44 解决: 20[提交][状态][讨论版] 题目描述 给定 K 个整数的序列{ N1, N2, ..., NK } &#xff0c;其任意连续子序列可表示为{ Ni, Ni1,...,Nj} &#xff0c;其中1 < i< j < K。最大连续子序列是所有…

linux钟java运行命令,在java中运行linux命令

我想在java中运行“ls”命令&#xff0c;我的代码是- 注意&#xff1a; - 我正在使用WINDOWS。在java中运行linux命令import java.io.IOException;public class Example{public void fn(){Runtime run Runtime.getRuntime();Process p null;String cmd "ls";try {…

python3seek_Python seek()和tell()函数详解

在讲解 seek() 函数和 tell() 函数之前&#xff0c;首先来了解一下什么是文件指针。我们知道&#xff0c;使用 open() 函数打开文件并读取文件中的内容时&#xff0c;总是会从文件的第一个字符(字节)开始读起。那么&#xff0c;有没有办法可以自定指定读取的起始位置呢&#xf…

n=n+1 放在print(s)的前/后的影响

# 123456.....100 ?#关键在于,当n为时,才print(s)n 1s 0while n < 101: s s n if n 100: #关键在于这一步, 我用if来判断,当n为100时,才print(s), 否则继续while循环 print(s) n n 1          转载于:https://www.cnblogs.co…

ScrollReveal.js – 帮助你实现超炫的元素运动效果

ScrollReveal.js 用于创建和管理元素进入可视区域时的动画效果&#xff0c;帮助你的网站增加吸引力。只需要给元素增加 data-scrollreveal 属性&#xff0c;当元素进入可视区域的时候会自动被触发设置好的动画。 您可能感兴趣的相关文章2013年最受欢迎的10篇前端开发博文小伙伴…

JDBC布尔兼容性列表

有趣的是&#xff0c;布尔类型只是在SQL标准后期才引入&#xff0c;即SQL&#xff1a;1999 。 即使在今天&#xff0c;并非所有数据库本身都支持BOOLEAN或BIT类型。 最重要的是&#xff0c;我们仍然可以在Oracle中等待一段时间。 这是2002年以来关于该主题的“问汤姆”的观点&a…

linux用户操作的日志,linux 用户操作记录并录入日志

1. 添加bash全局配置文件&#xff1a;cd /etc/profile.dvi log_command.sh输入如下内容&#xff1a;export PROMPT_COMMAND‘RETRN_VAL$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\[ ]*//" ) [$RETRN_VAL]"‘2. 添加rsy…

我实在不懂Python的Asyncio

原语 事件循环(Event Loop)Awaitables和CoroutinesCoroutine WrappersAwaitables and FuturesTasksHandlesExecutorsTransport and Protocols如何使用Asyncio上下文数据个人想法这是Flask&#xff0c;Sentry的作者Armin Ronacher的一篇博客&#xff0c;这篇文章的影响很大&…

GDI+与WPF中的颜色简析

GDI与WPF中的颜色简析 原文:GDI与WPF中的颜色简析--------------------------------------------------------------------------------引用或转载时请保留以下信息&#xff1a;大可山 [MSN:a3news(AT)hotmail.com] http://www.zpxp.com http://www.brawdraw.com萝卜鼠在线图形…

pythondatetime_Date

在JavaScript中&#xff0c;Date对象用来表示日期和时间。要获取系统当前时间&#xff0c;用&#xff1a;var now new Date();now; // Wed Jun 24 2015 19:49:22 GMT0800 (CST)now.getFullYear(); // 2015, 年份now.getMonth(); // 5, 月份&#xff0c;注意月份范围是0~11&…

Panorama Viewer – jQuery 360度全景展示插件

jQuery Panorama Viewer 这款插件可以帮助你在网站中嵌入全景图片。要做到这一点&#xff0c;首先只需要在页面中引入最新的 jQuery 库&#xff0c;以及 jquery.panorama_viewer.js 和 panorama_viewer.css 到页面中&#xff0c;然后给图片添加 CSS 类“panorama”。现代浏览器…

优化您的ApplicationContext

Spring有一个问题&#xff0c;已经存在了一段时间&#xff0c;我在许多项目中都遇到过。 与Spring或Spring的Guys无关&#xff0c;这取决于像您和我这样的Spring用户。 让我解释一下……在Spring 2的过去&#xff0c;您必须手动配置Application Context&#xff0c;手动创建一个…

linux多线程编程(中嵌教育-嵌入式linux开发课件),linux多线程编程(中嵌教育-嵌入式linux开发课件).ppt...

linux多线程编程(中嵌教育-嵌入式linux开发课件).pptlinux多线程编程 Linux下线程概述 linux线程实现 1、Linux下线程概述 进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。 线程通常叫做轻型的进程。线程是在共享内存空间中并发执行的多道…