作为一名资深的java工程师(并不是),我们长期的工作使我们积累了非常多的轮子,有些轮子使我们可以进行骚操作,有些轮子帮助我们快速启动项目,单独的一个类,一部分代码片段我们可以在固定的文档里做记录,但是如果是作为项目的组件或者工具库,显然我们需要一个云端的仓库并且能在使用时方便的耦合到我们的项目中,于是我们选择发布自己的构件到 Maven 中央仓库中(oss.sonatype.org/),问渠那得清如许,绝知此事要躬行,开始动手环节:
具体发布步骤如下:
一、创建项目的github仓库,我使用的github,记录下地址
二、注册sonatype账号,创建新的issue
1.注册地址:https://issues.sonatype.org ,务必记住账号密码!
2.创建一个新的issue
如图,在sonatype官网的上方,点击“create”创建一个新的issue
3.填写相关信息,此处需要填写项目github仓库以确认你有项目的所有权
①其中上方的“Project”和“Issue Type”不需要修改,如下方所示
②“Group Id”中填写的域名你要有所有权
③创建issue后,按照commonts中官方的提示进行相关操作
三、创建gpg秘钥对
win10下载gpghttps://www.gpg4win.org/
安装完成后依次执行以下命令:
gpg --version
检查是否安装成功gpg --gen-key
生成密钥对gpg --list-keys
查看公钥
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 你的公钥
将公钥发布到 PGP 密钥服务器
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 你的公钥
查询公钥是否发布成功
四、修改你使用的maven的settings文件
我使用的settings文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>E:\maven-repository</localRepository>
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
<server>
<id>ossrh</id> <!--自定义的id,在项目的pom文件配置中会用到-->
<username>jorian93</username><!--snatype的账号-->
<password>sXgc42.@1125</password><!--snatype的密码-->
</server>
<server>
<id>sonatype-nexus-snapshots</id>
<username>jorian93</username><!--snatype的账号-->
<password>sXgc42.@1125</password><!--snatype的密码-->
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>jorian93</username><!--snatype的账号-->
<password>sXgc42.@1125</password><!--snatype的密码-->
</server>
</servers>
<mirrors>
</mirrors>
<profiles>
</profiles>
<activeProfiles>
</activeProfiles>
</settings>
五、设置项目的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.jorianye.common</groupId>
<artifactId>tools</artifactId>
<version>1.0.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<name>tools</name>
<description>Demo project for Spring Boot</description>
<url>https://github.com/Jorian93/common</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<swagger.version>2.8.0</swagger.version>
<google.guava>23.0</google.guava>
<fastjson.version>1.2.47</fastjson.version>
<druid.version>1.1.9</druid.version>
<poi.version>3.17</poi.version>
<jwt.version>0.9.0</jwt.version>
</properties>
<!--licenses信息-->
<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信息,此处和你在sonatype中的issue填写的一样-->
<scm>
<url>https://github.com/Jorian93/common</url>
<connection>scm:git:https://github.com/Jorian93/common.git</connection>
<developerConnection>scm:git:https://github.com/Jorian93/common.git</developerConnection>
</scm>
<!--发布者信息-->
<developers>
<developer>
<name>jorianye</name>
<email>[email protected]</email>
<organization>https://github.com/Jorian93</organization>
<organizationUrl>https://github.com/Jorian93</organizationUrl>
</developer>
</developers>
<!--你项目的依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<!--mail-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--Shiro-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!--LOMBOK-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
<!--Mybatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<!--mpplus 3.x后需单独添加代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.0</version>
</dependency>
<!--mp-plus-分页插件-->
<!--velocity 代码生成器需要模板引擎-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
<!-- 模板引擎 -->
<!--<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>-->
<!--JWT-->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.2.0</version>
</dependency>
<!--guava-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${google.guava}</version>
</dependency>
</dependencies>
<profiles>
<profile>
<id>release</id>
<build>
<plugins>
<!-- Source ,不可省略-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- java-doc ,不可省略-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<encoding>utf-8</encoding>
<charset>utf-8</charset>
<docencoding>utf-8</docencoding>
<additionalOptions>
<additionalOption>-Xdoclint:none</additionalOption>
</additionalOptions>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- GPG ,不可省略-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id><!--此处是你在settings中设置的server id-->
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>ossrh</id><!--此处是你在settings中设置的server id-->
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</profile>
</profiles>
</project>
六、执行mvn deploy,发布项目到中央仓库
七、登陆 https://oss.sonatype.org 后,查看stagingRepositories
①刚刚提交的项目在系统中会显示是open状态
②勾选刚刚提交的项目,点击close,刷新页面,使项目进入closed状态
③勾选刚刚提交的项目,点击release,刷新页面,使项目进入released状态
八、回到issue,回复官方,表示已经将项目进入到released状态