一键发布到Maven Central的方法

当我向Maven Central发布Java开源库jcabi-aspects的新版本时,我花费了30秒钟的时间。 甚至更少。 最近,我发布了0.17.2版本。 您可以在Github第80期中看到所有情况:



github-ticket-80
如您所见,我向Rultor发出了命令,它向Maven Central发布了一个新版本。 我什么也没做

现在,让我们看看如何做到这一点。 如何配置项目,以便将新版本发布到Maven Central只需花费几秒钟的时间。

顺便说一句,我假设您正在Github中托管项目。 如果没有,整个教程将无法正常工作。 如果您仍然不在Github中,我强烈建议您搬到那里。

准备您的POM

确保pom.xml包含Sonatype所需的所有元素,如Central Sync Requirements中所述 。 我们将部署到Sonatype,他们会将所有JAR(不仅是)工件同步到Maven Central。

使用Sonatype注册项目

在Sonatype JIRA中创建一个帐户并提出票证,要求批准您的groupId。 《 OSSRH指南》更详细地说明了此步骤。

创建和分发GPG密钥

创建GPG密钥并分发它,如本使用PGP签名文章中所述。

完成此步骤后,您应该有两个文件: pubring.gpgsecring.gpg

创建settings.xml

在上一步中创建的两个.gpg文件旁边创建settings.xml

<settings><profiles><profile><id>foo</id> <!-- give it the name of your project --><properties><gpg.homedir>/home/r</gpg.homedir><gpg.keyname>9A105525</gpg.keyname><gpg.passphrase>my-secret</gpg.passphrase></properties></profile></profiles><servers><server><id>sonatype</id><username><!-- Sonatype JIRA user name --></username><password><!-- Sonatype JIRA pwd --></password></server></servers>
</settings>

在此示例中, 9A105525是您的公共密钥的ID,而my-secret是您在生成密钥时使用的密码。

加密安全资产

现在,使用Rultor公钥( 9AF0FA4C )对这三个文件进行加密:

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 9AF0FA4C
gpg --trust-model always -a -e -r 9AF0FA4C pubring.gpg
gpg --trust-model always -a -e -r 9AF0FA4C secring.gpg
gpg --trust-model always -a -e -r 9AF0FA4C settings.xml

您将获得三个新文件: pubring.gpg.ascsecring.gpg.ascsettings.xml.asc 。 将它们添加到项目的根目录,然后提交并推送。 这些文件包含您的机密信息,但是只有Rultor服务器可以解密它们。

添加Sonatype存储库

我建议使用jcabi-parent作为您项目的父pom。 这将使许多其他步骤变得不必要。 如果您使用的是jcabi-parent,请跳过此步骤。

但是,如果您不使用jcabi-parent,则应将这两个存储库添加到pom.xml

<project>[...]<distributionManagement><repository><id>oss.sonatype.org</id><url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url></repository><snapshotRepository><id>oss.sonatype.org</id><url>https://oss.sonatype.org/content/repositories/snapshots</url></snapshotRepository></distributionManagement>
</project>

配置GPG插件

同样,我建议使用http://parent.jcabi.com,它会自动配置此插件。 如果您正在使用它,请跳过此步骤。

否则,将此插件添加到您的pom.xml

<project>[..]<build>[..]<plugins>[..]<plugin><artifactId>maven-gpg-plugin</artifactId><version>1.5</version><executions><execution><id>sign-artifacts</id><phase>verify</phase><goals><goal>sign</goal></goals></execution></executions></plugin></plugins></build>
</project>

配置版本插件

再一次,我建议使用http://parent.jcabi.com。 它可立即配置所有必需的插件。 如果您正在使用它,请跳过此步骤。

否则,将此插件添加到您的pom.xml

<project>[..]<build>[..]<plugins>[..]<plugin><groupId>org.codehaus.mojo</groupId><artifactId>versions-maven-plugin</artifactId><version>2.1</version><configuration><generateBackupPoms>false</generateBackupPoms></configuration></plugin></plugins></build>
</project>

配置Sonatype插件

是的,您是对的,http://parent.jcabi.com也会在这里为您提供帮助。 如果您正在使用它,也请跳过此步骤。

否则,将这四个插件添加到您的pom.xml

<project>[..]<build>[..]<plugins>[..]<plugin><artifactId>maven-deploy-plugin</artifactId><configuration><skip>true</skip></configuration></plugin><plugin><artifactId>maven-source-plugin</artifactId><executions><execution><id>package-sources</id><goals><goal>jar</goal></goals></execution></executions></plugin><plugin><artifactId>maven-javadoc-plugin</artifactId><executions><execution><id>package-javadoc</id><phase>package</phase><goals><goal>jar</goal></goals></execution></executions></plugin><plugin><groupId>org.sonatype.plugins</groupId><artifactId>nexus-staging-maven-plugin</artifactId><version>1.6</version><extensions>true</extensions><configuration><serverId>oss.sonatype.org</serverId><nexusUrl>https://oss.sonatype.org/</nexusUrl><description>${project.version}</description></configuration><executions><execution><id>deploy-to-sonatype</id><phase>deploy</phase><goals><goal>deploy</goal><goal>release</goal></goals></execution></executions></plugin></plugins></build>
</project>

创建Rultor配置

在项目的根目录中创建一个.rultor.yml文件( 参考页详细介绍了此格式):

decrypt:settings.xml: "repo/settings.xml.asc"pubring.gpg: "repo/pubring.gpg.asc"secring.gpg: "repo/secring.gpg.asc"
release:script: |mvn versions:set "-DnewVersion=${tag}"git commit -am "${tag}"mvn clean deploy --settings /home/r/settings.xml

您可以将文件与jcabi-aspects的实时Rultor 配置进行比较 。

运行!

商标
现在是时候看看它们如何工作了。 在Github问题跟踪器中创建一个新票证,并将类似的内容发布到其中(阅读有关Rultor命令的更多信息):

@rultor release, tag is `0.1`

您将在几秒钟内收到答复。 其余的将由Rultor完成。

请享用!

顺便说一句,如果我无法解释某些问题 ,请毫不犹豫地向Rultor问题跟踪器提交票证。 我会尽力帮助您。

是的,忘记了,Rultor还在做两项重要的事情。 首先,它会创建一个带有适当描述的Github版本。 其次,它发布有关该版本的推文,您可以转发该推文,以向关注者发布公告。 这两个功能对我来说都很方便。 例如:

相关文章

您可能还会发现以下有趣的帖子:

  • 一键式部署到CloudBees
  • 部署脚本与Rultor
  • 一键式发布到Rubygems的方法
  • 鲁托尔+特拉维斯
  • 每个构建都在自己的Docker容器中

翻译自: https://www.javacodegeeks.com/2014/09/how-to-release-to-maven-central-in-one-click.html

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

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

相关文章

vue组件详解(一)——组件与复用

一、什么是组件 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素&#xff0c;封装可重用的代码。 二、组件用法 组件需要注册后才可以使用&#xff0c;注册有全局注册和局部注册两种方式。 2.1 全局注册后&#xff0c;任何V ue 实例都可以使用。如&am…

fatal error LNK1120: 1 unresolved externals

出现这个错误可能原因很多&#xff0c;我的问题是来自于把template写在了cpp文件中template 有弊端 就是 他的实现部分必须和声明部分在一起 你声明在一个头文件 定义在另一个头文件 编译器好笨!!!!!!!!!,它根本就找不到 ///只要你把实现部分拷贝到你声明的头文件,就没有错…

sed命令学习

sed编辑器&#xff0c;处理文本过程如下&#xff1a; sed把当前处理的行保存在一个临时缓冲区中&#xff0c;然后处理缓冲区中的行&#xff0c;完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除&#xff0c;然后下一行读入&#xff0c;处理和显示。处理完输入…

在Spring Boot应用程序中测试邮件代码

在构建Spring Boot应用程序时&#xff0c;您可能会需要添加邮件配置。 实际上&#xff0c;在Spring Boot中配置邮件与在Spring Bootless应用程序中配置邮件没有太大区别。 但是&#xff0c;如何测试邮件配置和提交工作正常&#xff1f; 我们来看一下。 我假设我们有一个引导的…

CSS基础语法(三) CSS的6种特性

样式表常用写法及特性&#xff08;组合、继承、关联性、权值性、层叠性、重要性&#xff09; 1.样式的组合&#xff1a;把具有相同声明定义的选择符组合在一起&#xff0c;并用逗号隔开。&#xff0d;例如&#xff1a;段落元素p、单元格元素td和类c1可以使用相同样式&#xff…

卷积,DFT,FFT,图像FFT,FIR 和 IIR 的物理意义

卷积&#xff1a; 冲击信号会对线性系统产生冲击响应。 冲击信号可分解为平移度和幅度。其对线性系统的冲击响应可以分解为点点间的经平移和缩放的各个冲击响应的累加&#xff0c;通过卷积的表达式表示。 所谓的冲击响应&#xff0c;就是线性系统对任何输入信号的响应&#xff…

洛谷P2822 组合数问题

分析&#xff1a; 首先预处理出来&#xff0c;杨辉三角二维前缀和 代码&#xff1a; #include<cstdio> using namespace std; long long f[2005][2005],sum[2005][2005]; int main() {long long T,k;scanf("%lld%lld",&T,&k);for(long long i0;i<20…

es6笔记

es6对象浅复制&#xff1a; 字符串大小比较&#xff1a; 如果是汉字&#xff1a;a.charCodeAt() > b.charCodeAt() //使用carCodeAt将器转为asci码&#xff0c;在进行比较 如果是非汉字的字符串&#xff1a;直接比较或者使用上面的转码比较都可以。 如果是日期比较&#xff…

毕业设计上线啦!----跳蚤部落与基于Comet的WebIM系统开发

我不清楚把我的毕业设计的东西放上来之后&#xff0c;毕业论文答辩的时候会不会说我是在网上抄袭的&#xff0c;不过我还是果断的发上来与大家分享了&#xff01;&#xff01;呵呵&#xff0c;请大家支持&#xff01;高手就绕道吧&#xff01; 现在已经放到公网上&#xff0c;并…

poj2032Square Carpets(IDA* + dancing links)

题目请戳这里 题目大意:给一个H行W列的01矩阵,求最少用多少个正方形框住所有的1. 题目分析:又是一个红果果的重复覆盖模型.DLX搞之! 枚举矩阵所有的子正方形,全1的话建图.判断全1的时候,用了一个递推,dp[i][j][w][h]表示左上角(i,j)的位置开始长h宽w的矩形中1的个数,这样后面可…

使用Spring Security保护REST服务

总览 最近&#xff0c;我正在一个使用REST服务层与客户端应用程序&#xff08;GWT应用程序&#xff09;进行通信的项目中。 因此&#xff0c;我花了很多时间来弄清楚如何使用Spring Security保护REST服务。 本文介绍了我找到的解决方案&#xff0c;并已实现。 我希望此解决方案…

http请求post,返回excel文件,并接收

1.post的方法里要加responseType: arraybuffer参数&#xff0c;不然下载的excel会乱码 2.使用{type: "application/vnd.ms-excel"}的写法&#xff0c;可以保存为xls格式的excel文件&#xff08;兼容老版本&#xff09;。而使用“application/vnd.openxmlformats-off…

linux图形开发工具

请见:http://hi.baidu.com/jjzhang166/blog/item/b8dfb6ecd5fc6e2d62d09f9e.html 转载于:https://www.cnblogs.com/vilyLei/archive/2011/12/12/2284869.html

具有Overlord的WildFly 8.1中的API管理

昨天&#xff0c;我简要介绍了霸王项目家族。 今天该试驾了。 API管理子项目两天前发布了1.0.0.Alpha1&#xff0c;并根据18个月的路线图介绍了第一组功能。 APIMan到底是什么&#xff1f; 它是一个API管理系统&#xff0c;可以嵌入现有框架或应用程序中&#xff0c;甚至可以作…

设计模式学习笔记-代理模式

1. 概述 为其它对象提供一种代理以控制对这个对象的访问。 解决的问题&#xff1a;如果直接访问对象比较困难&#xff0c;或直接访问会给使用者或系统带来一系列问题。这样对于客户端&#xff08;调用者&#xff09;来说&#xff0c;就不需要直接与真实对象进行交互&#xff0c…

Tomcat配置自签名https

从JDK中找到keytool.exe&#xff0c;随便复制到一个方便的目录&#xff0c;在命令行中进入这个目录。 第一步&#xff1a;为服务器生成证书 tomcat.keystore&#xff0c;名字就是域名&#xff0c;其他的看着写。 keytool -genkey -v -alias tomcat -keyalg RSA -validity 3650…

MFC学习之路之多媒体 --(1) DirectShow

可以说整个Windows的多媒体编程都是以DirectShow为基础&#xff0c;那好&#xff0c;来吧&#xff0c;我们直接看DirectShow的一段基础代码。 bool Mp3::Load(LPCWSTR szFile) {Cleanup();ready false;if (SUCCEEDED(CoCreateInstance( CLSID_FilterGraph,NULL,CLSCTX_INPROC_…

使用反射处理Java批注

在上一篇有关Java注释的文章中&#xff0c;我概述了一个最近的用例&#xff0c;并为您提供了一些自定义注释的示例以及如何使用它们。 在本文中&#xff0c;我将更进一步&#xff0c;并为您提供一些自定义注释的示例&#xff0c;以及如何使用Java Reflection API处理这些自定义…

Excel 2007 Open XML文件结构(2)

Excel 2007 Open XML文件结构&#xff08;2&#xff09; 在以上文件中&#xff0c;根据<sheet>元素中r:id属性的值可得到工作表数据的XML文件。例如&#xff0c;在workbook.xml文件中名为工作表1的工作表的r:id属性为rld1&#xff0c;在以上文件中根据ID找到以下代码&…

Vue.js最佳实践

Vue.js最佳实践 第一招&#xff1a;化繁为简的Watchers 场景还原&#xff1a; created(){this.fetchPostList() },watch: {searchInputValue(){this.fetchPostList()} } 组件创建的时候我们获取一次列表&#xff0c;同时监听input框&#xff0c;每当发生变化的时候重新获取一…