关注程序员的故事,一起用技术改变世界
将jar包发布到Maven中央仓库(Maven Central Repository),这样所有的Java开发者都可以使用Maven直接导入依赖,不过要说这个发布过程,还真是比较复杂,本文就来详细说下如何发布jar包到maven中央仓库。
发布教程
第一步:创建工单
首先得注册sonatype账号,推荐使用微软的Edge和Chrome浏览器访问,需要填写Email, Full Name, Username以及password,其中Username与Password后面的步骤需要用到,请牢记!
注册成功后,点击浏览器上面的新建开始创建工单,通过在JIRA上创建issue来申请发布新的Jar包,Sonatype的工作人员会对申请的工单进行审核,只要按照要求填写工单,一般审核都不会出现问题。
创建工单的时需要填写下面这些信息:
- Summary
- Description
- Group Id()
- Project URL
- SCM url
对应的意思如下:
Summary:概要
Description:描述
Group Id:要上传的 Maven 项目的 GroupId,对于我们个人用户,一般使用 com.github.用户名 这种命名方式。当然如果你用的是其他代码管理平台,用其他的也 ok,比如 com.github.用户名。
Project URL:项目的主页,例如我的是:https://github.com/zengxueqi-yu/july-excel.git
SCM url:项目 Clone 的地址,注意要是 http 协议的,而不是 git 协议的,例如我的是:https://github.com/july-excel.git。
工单创建完成后,过一段是时间Sonatype工作人员就会发来审核消息,要求在GitHub账户中创建一个指定名称的仓库,这个是用来验证你对账户的所有权。仓库创建完成后,在工单的评论区回复新建的仓库地址就可以啦(等审核完成后,仓库可以自行删除)。
等验证仓库回复后,随后工作人员就会提示审核完成了,此时就可以上传Jar包啦。
第二步:安装并配GPG
发布Jar到Maven仓库中的所有文件都要使用GPG签名,以保障完整性。所以需要在本地安装并配置GPG。下载地址:https://gpgtools.org/,下载并安装GPG。打开GPG后点击右上角新建。
输入name、email以及password后点击Generate Key生成Key信息。
第三步:配置Maven的setting.xml文件
找到Maven安装的目录,根据实际使用的Maven文件进行配置,比如:/Library/maven/apache-maven-3.6.1/conf/settings.xml。打开settings.xml文件,在标签内配置第一步中的UserName和Password,这样才能将Jar上传到Sonatype OSSRH仓库。
第四步:修改pom.xml文件
修改需要打包上传项目的pom.xml文件,配置信息如下:
<?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.0modelVersion> <parent> <groupId>org.sonatype.ossgroupId> <artifactId>oss-parentartifactId> <version>7version> parent> <groupId>com.github.zengxueqi-yugroupId> <artifactId>july-excelartifactId> <version>1.0.2-RELEASEversion> <name>july-excelname> <description>excel导入导出工具description> <licenses> <license> <name>The Apache Software License, Version 2.0name> <url>http://www.apache.org/licenses/LICENSE-2.0.txturl> license> licenses> <scm> <url>https://github.com/zengxueqi-yu/july-excelurl> <connection>scm:git:https://github.com/zengxueqi-yu/july-excel.gitconnection> <developerConnection>scm:git:https://github.com/zengxueqi-yu/july-excel.gitdeveloperConnection> scm> <developers> <developer> <name>zengxueqiname> <email>zengxueqi-yu@outlook.comemail> <url>https://github.com/zengxueqi-yuurl> developer> developers> <properties> <java.version>1.8java.version> <project.build.sourceEncoding>UTF-8project.build.sourceEncoding> <lombok-version>1.18.10lombok-version> <servlet-api-version>3.1.0servlet-api-version> <apache.poi-version>4.0.1apache.poi-version> <slf4j.version>1.7.7slf4j.version> <cglib.version>2.2.2cglib.version> <spring.web.version>5.2.4.RELEASEspring.web.version> properties> <dependencies> <dependency> <groupId>javax.servletgroupId> <artifactId>javax.servlet-apiartifactId> <scope>providedscope> <version>${servlet-api-version}version> dependency> <dependency> <groupId>org.apache.poigroupId> <artifactId>poiartifactId> <version>${apache.poi-version}version> dependency> <dependency> <groupId>org.apache.poigroupId> <artifactId>poi-ooxmlartifactId> <version>${apache.poi-version}version> dependency> <dependency> <groupId>org.projectlombokgroupId> <artifactId>lombokartifactId> <version>${lombok-version}version> <scope>providedscope> dependency> <dependency> <groupId>org.slf4jgroupId> <artifactId>slf4j-apiartifactId> <version>${slf4j.version}version> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-webartifactId> <version>${spring.web.version}version> <optional>trueoptional> dependency> <dependency> <groupId>cglibgroupId> <artifactId>cglibartifactId> <version>${cglib.version}version> dependency> <dependency> <groupId>com.sun.jerseygroupId> <artifactId>jersey-jsonartifactId> <version>1.14version> dependency> dependencies> <distributionManagement> <snapshotRepository> <id>sonatype-releasesid> <url>https://oss.sonatype.org/content/repositories/snapshots/url> snapshotRepository> <repository> <id>sonatype-releasesid> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/url> repository> distributionManagement> <build> <plugins> <plugin> <groupId>org.sonatype.pluginsgroupId> <artifactId>nexus-staging-maven-pluginartifactId> <version>1.6.7version> <extensions>trueextensions> <configuration> <serverId>sonatype-releasesserverId> <nexusUrl>https://oss.sonatype.org/nexusUrl> <autoReleaseAfterClose>trueautoReleaseAfterClose> configuration> plugin> <plugin> <groupId>org.apache.maven.pluginsgroupId> <artifactId>maven-source-pluginartifactId> <version>2.2.1version> <executions> <execution> <id>attach-sourcesid> <goals> <goal>jar-no-forkgoal> goals> execution> executions> plugin> <plugin> <groupId>org.apache.maven.pluginsgroupId> <artifactId>maven-javadoc-pluginartifactId> <version>2.9.1version> <executions> <execution> <id>attach-javadocsid> <goals> <goal>jargoal> goals> <configuration> <additionalparam>-Xdoclint:noneadditionalparam> configuration> execution> executions> plugin> <plugin> <groupId>org.apache.maven.pluginsgroupId> <artifactId>maven-gpg-pluginartifactId> <version>1.5version> <executions> <execution> <id>sign-artifactsid> <phase>verifyphase> <goals> <goal>signgoal> goals> execution> executions> plugin> <plugin> <artifactId>maven-compiler-pluginartifactId> <version>3.8.0version> <configuration> <source>${java.version}source> <target>${java.version}target> configuration> plugin> <plugin> <groupId>org.apache.maven.pluginsgroupId> <artifactId>maven-surefire-pluginartifactId> <version>2.4.2version> <configuration> <skipTests>trueskipTests> <source>${java.version}source> <target>${java.version}target> configuration> plugin> plugins> <finalName>july-excelfinalName> build>project>
第四步:发布Jar包
在Terminal中执行mvn clean deploy命令,开始打包上传,第一需要输入GPG账号和密码,即可将jar包发布到Sonatype OSSRH仓库。mvn clean deploy命令执行成功的输出日志如下:
[INFO] * Upload of locally staged artifacts finished.[INFO] * Closing staging repository with ID "comgithubzengxueqi-yu-1043".Waiting for operation to complete...............[INFO] Remote staged 1 repositories, finished with success.[INFO] Remote staging repositories are being released...Waiting for operation to complete...............[INFO] Remote staging repositories released.[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 03:40 min[INFO] Finished at: 2020-07-24T17:36:36+08:00[INFO] ------------------------------------------------------------------------
通过日志可以看出,Jar包已经生成上传到Sonatype OSSRH仓库,只需要等待Jar同步到Maven仓库就可以啦!一般同步需要2-3天的时间,可以去Maven Repository里面查看Jar是否生成发布,如果出现错误,可能是系统版本好存在重复,可以修改版本重新打包上传,如下图:
以上就是发布Jar到Maven中央仓库的教程,细节信息比较多,一步出现问题,可能就会导致发布失败,所以得仔细阅读教程!