概述
本来不打算写这篇文章,因为看到了很多这样的文章,本想着按照网上的做一遍,发现遇到的坑是找遍各个博客论坛也没有解决,所以还是打算也弄一篇这样的教程,记录下自己走过的坑。本文主要是整合,也是借鉴了许多优秀的文章。
这是我第一次尝试去开源自己封装的一个小工具,虽然不起眼。但是还是千里之行的第一步,还是让自己狠狠的高兴了一番。
首先我要先感谢一些博主的博客,真的是分享才是硬道理。
第一次主要参考这篇博客 如何提交项目到Maven中央仓库(图文详解)
参考了这篇文章 jdk8使用maven-javadoc-plugin插件报错的处理
如何上传自己的jar包到maven公共远程中央仓库(终)
整个操作的流程:
- 注册Nexus 账号
- Nexus 创建项目
- GPG秘钥安装
- 项目POM文件配置
一、注册Nexus账号
Nexus账号注册地址 注意密码的复杂度
二、创建项目
1、新建 —> issue
2、项目 —> Community Support - Open Source Project Repository Hosting
3、类型 —> New Project
4、概要—> 自己看着写
5、以下步骤参考图片(其实下面的英文提示很清晰了)
6、创建 Issue 后,等待审核即可。一般会在一个工作日内审核完成。当Issue的Status变为RESOLVED 或 FIXED 后,即可进行下一步操作。
三、GPG秘钥安装
1、下载地址 :https://www.gpg4win.org/download.html 红框标注分别是Windows和Mac的
GPG常用命令(直接复制之前博主的,写的很棒)
查看是否安装成功
gpg --version
生成密钥对
gpg --gen-key
查看公钥
gpg --list-keys
将公钥发布到PGP密钥服务器
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 公钥ID
查询公钥是否发布成功
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys
2、在安装完成后,执行以下命令生成密钥对,按照提示输入账号、邮箱、密码 (PS: 此处的密码在后面发布会用到,请务必记住)
生成秘钥
gpg2 --gen-key
3、执行命令查看密钥, 此时控制台会输出类似下面的内容
4、执行以下命令将公钥发布到服务器中(如果失败就在重新发送一次)
将公钥发布到PGP密钥服务器
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 公钥ID
查询公钥是否发布成功
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys
四、Maven配置
我们要做一个Maven的配置,把上传的用户名和密码放在里边
<!-- sonaty的账号和密码 两个sever是一样的。只是为了区分不同功能配置-->
<server>
<id>releases</id>
<username>your user name</username>
<password>your password</password>
</server>
<server>
<id>snapshots</id>
<username>your user name</username>
<password>your password</password>
</server>
五、项目POM文件配置
下面是本人的项目pom文件,全部。之后会去细说需要注意的配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.github.DDLoveWorld</groupId>
<artifactId>common-query</artifactId>
<packaging>jar</packaging>
<version>1.0.1-SNAPHOST</version>
<description>Common query demo project for Spring Boot</description>
<properties>
<global.version>1.0.1</global.version>
<chartset.UTF8>UTF-8</chartset.UTF8>
<mybatis.plus.version>3.1.2</mybatis.plus.version>
<lombok.version>1.18.10</lombok.version>
</properties>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
<!--发布到maven仓库-->
<distributionManagement>
<repository>
<id>releases</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
<profiles>
<profile>
<id>release</id>
<!-- 指定profile只在JDK版本大于等于1.8时有效-->
<activation>
<jdk>[1.8,)</jdk>
</activation>
<build>
<pluginManagement>
<plugins>
<!--这是自动发布的插件-->
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.3</version>
<extensions>true</extensions>
<configuration>
<serverId>releases</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
<useReleaseProfile>false</useReleaseProfile>
<releaseProfiles>release</releaseProfiles>
<goals>deploy</goals>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- gpg加密 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 打包源码为jar -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 打包javadoc文档 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<additionalOptions>
<!-- 解决jdk1.8以后编译出错问题-->
<additionalOption>-Xdoclint:none</additionalOption>
</additionalOptions>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
</profiles>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<scm>
<url>https://github.com/DDLoveWorld/common-query</url>
<connection>https://github.com/DDLoveWorld/common-query.git</connection>
<developerConnection>https://github.com/DDLoveWorld</developerConnection>
</scm>
<developers>
<developer>
<name>hualidong</name>
<email>869701411@qq.com</email>
<url>https://github.com/DDLoveWorld</url>
</developer>
</developers>
</project>
1、由于Maven仓库校验还是很严格的,一些描述性的配置也都是不能少的
<!-- 描述项目节点-->
<description>Common query demo project for Spring Boot</description>
<!-- 作者信息-->
<developers>
<developer>
<name>hualidong</name>
<email>869701411@qq.com</email>
<url>https://github.com/DDLoveWorld</url>
</developer>
</developers>
<!-- 开源签名证书 -->
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
2、Maven仓库的一些配置
<!-- 仓库信息 -->
<scm>
<url>https://github.com/DDLoveWorld/common-query</url>
<connection>https://github.com/DDLoveWorld/common-query.git</connection>
<developerConnection>https://github.com/DDLoveWorld</developerConnection>
</scm>
<!-- 发布管理信息 -->
<distributionManagement>
<repository>
<!-- 这里的id必须要和全局配置中的release id 一致 -->
<id>releases</id>
<!-- 这里就是在创建issue成功后,对方回复的release发布地址-->
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
</repository>
<snapshotRepository>
<!-- 这里的id必须要和全局配置中的snapshot id 一致 -->
<id>snapshots</id>
<!-- 这里就是在创建issue成功后,对方回复的snapshot发布地址-->
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
3、打包配置
发布到maven中央仓库会要求我们在上传项目得jar的同时,必须同步发布对应到Javadoc、source、asc(利用gpg生成到校验),所以需要在maven中添加以下构建插件(开始划重点了)
(1)Javadoc
这是个大坑啊,在jdk版本1.8之后校验规则变了,所以要动一动(注意好每个配置项所放的位置,参考这个pom)。
Javadoc 的命令是:(我遇到的坑的关键点)
mvn javadoc:jar
<!-- 指定profile只在JDK版本大于等于1.8时有效-->
<activation>
<jdk>[1.8,)</jdk>
</activation>
<!-- 打包javadoc文档 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<additionalOptions>
<!-- 解决jdk1.8以后编译出错问题-->
<additionalOption>-Xdoclint:none</additionalOption>
</additionalOptions>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
(2)Source
打包源码插件。附带命令
mvn source:jar
<!-- 打包源码为jar -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
(3) GPG秘钥
加密工具。附带命令:
mvn gpg:sign
<!-- gpg加密 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
其他的插件就不在叙述了。
六、发布项目
到了最最关键的时刻了,这个时刻就是我遇到的坑最大了。
发布
mvn clean deploy -P release
就是这个命令啊怎么弄都不行,上传的东西是各种缺失,不是少javadoc的jar就是少source的jar。搜索了很多网上的博客也都是这样的命令。真的是纠结了老半天。分散想下,先试下各个插件的命令是否可以正常运行,参考上面各个单独命令(mvn javadoc:jar 等)。发现都是没问题的。最终命令:
<!-- 终极运行发布命令-->
mvn clean install javadoc:jar source:jar gpg:sign deploy -P release
“妈妈再也不用担心我的发布不成功了!”
解释下,命令是从左到右依次执行的 最终成功上传到仓库并校验合格,就差close 和 release了。
也可以用mvn设置版本:
mvn versions:set -DnewVersion=1.0.1-SNAPHOST
登录https://oss.sonatype.org,然后选择staging Repositories
我这是上传发布成功了,所以没有待发布了。
操作步骤就是选择要发布的列,先点close(当然release也点不了),等待检查通过后,刷新,release就可以点击了,点击release就ok了 。等待一段时间就ok了。官方的回答是十分钟左右就可以引用自己的jar了。两个小时上传到中央库
如果Release成功,并且你是首次发布组件,则需要到你创建到issue中回复 “我已经成功发布该组件”,经历大概2小时后,该组件将会同步到对应的maven仓库 。
最后说下个人感受:
1、本身我这边也是参考了网络上的各种文章去做的,也很多,不打算在写这篇文章了。但是实际操作下来还是和网上的有一定差别,还是记录下。希望能给大家一点帮助,如果有说的不对的,请留言改正
2、还有一点就是,大家应该都有过这种感受,就是玩游戏一开始都是说太难了,太难了,但是当你通关之后一次,在回过头来玩一次,你会发现so ease!无论之前多难过的关卡。技术也是一样,现在回想整个发布的过程,一头雾水的扎进去,遇到各种坑,最终完成后。只想说一句 so ease!
3、终于开源了一些自己的小工具,尽管不值一提,但是还是很开心。后期会把小工具链接加上!!
下面是本人做的一个小工具:
做了一个前后端接口的自定义查询构造。减少前后端的接口查询交流
Mybatis-plus二次开发之接口参数自定义查询
最后
以上就是碧蓝流沙为你收集整理的发布项目到Nexus Maven中央仓库(整合版+坑)的全部内容,希望文章能够帮你解决发布项目到Nexus Maven中央仓库(整合版+坑)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复