maven javamail 抄送 maven 发布jar包_apache

关注程序员的故事,一起用技术改变世界


将jar包发布到Maven中央仓库(Maven Central Repository),这样所有的Java开发者都可以使用Maven直接导入依赖,不过要说这个发布过程,还真是比较复杂,本文就来详细说下如何发布jar包到maven中央仓库。

发布教程

第一步:创建工单

首先得注册sonatype账号,推荐使用微软的Edge和Chrome浏览器访问,需要填写Email, Full Name, Username以及password,其中Username与Password后面的步骤需要用到,请牢记!

maven javamail 抄送 maven 发布jar包_maven javamail 抄送_02

maven javamail 抄送 maven 发布jar包_maven javamail 抄送_03

注册成功后,点击浏览器上面的新建开始创建工单,通过在JIRA上创建issue来申请发布新的Jar包,Sonatype的工作人员会对申请的工单进行审核,只要按照要求填写工单,一般审核都不会出现问题。

maven javamail 抄送 maven 发布jar包_maven 改变仓库地址_04

创建工单的时需要填写下面这些信息:

  • 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。



maven javamail 抄送 maven 发布jar包_apache_05


工单创建完成后,过一段是时间Sonatype工作人员就会发来审核消息,要求在GitHub账户中创建一个指定名称的仓库,这个是用来验证你对账户的所有权。仓库创建完成后,在工单的评论区回复新建的仓库地址就可以啦(等审核完成后,仓库可以自行删除)。

maven javamail 抄送 maven 发布jar包_github_06

等验证仓库回复后,随后工作人员就会提示审核完成了,此时就可以上传Jar包啦。

maven javamail 抄送 maven 发布jar包_maven_07

第二步:安装并配GPG

发布Jar到Maven仓库中的所有文件都要使用GPG签名,以保障完整性。所以需要在本地安装并配置GPG。下载地址:https://gpgtools.org/,下载并安装GPG。打开GPG后点击右上角新建。

maven javamail 抄送 maven 发布jar包_github_08

输入name、email以及password后点击Generate Key生成Key信息。

maven javamail 抄送 maven 发布jar包_apache_09

第三步:配置Maven的setting.xml文件

找到Maven安装的目录,根据实际使用的Maven文件进行配置,比如:/Library/maven/apache-maven-3.6.1/conf/settings.xml。打开settings.xml文件,在标签内配置第一步中的UserName和Password,这样才能将Jar上传到Sonatype OSSRH仓库。

maven javamail 抄送 maven 发布jar包_github_10

第四步:修改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是否生成发布,如果出现错误,可能是系统版本好存在重复,可以修改版本重新打包上传,如下图:

maven javamail 抄送 maven 发布jar包_maven_11


以上就是发布Jar到Maven中央仓库的教程,细节信息比较多,一步出现问题,可能就会导致发布失败,所以得仔细阅读教程!