将jar包发布到maven中央仓库

将jar包发布到maven中央仓库

最近作了一个swagger-ui的开源项目,由于是采用vue进行解析swagger-json,须要前端支持,为了后端也能方便的使用此功能,因此将vue项目编译后的结果打成jar包放到maven中央仓库供有须要的人进行使用。php

将前端项目打成jar供后端使用还有一个好处就是,一些项目可能没有设置跨域,将jar与项目一块儿运行,就是同源访问,从根源上解决了跨域问题,能够很方便的使用。前端

申请一个groupId

中央仓库是不少jar的集合,对于maven的使用标识惟一性的由groupIdartifactIdversion三个要素组成,第一个是咱们对外须要惟一的,后面两个是咱们本身进行规划使用,因此上传中央仓库最重要的是申请一个groupId,此groupId与你要上传的jar包的groupId必须一致。vue

注册帐号

注册地址:issues.sonatype.org/secure/Sign…java

帐号和密码,在登录工单系统和提交时会用到,须要牢记。linux

申请groupId

申请地址 issues.sonatype.org/secure/Dash…git

点击新建 github

deploy_new

  • 项目:Community Support - Open Source Project Repository Hosting
  • 问题类型:New Project
  • 概要:描述下你要作的事情,尽可能使用英文,可以使用使用有道辅助翻译一下
  • 描述:可空,能够随便写点你为何要申请一个groupId
  • Group Id:很是重要,填写一个惟一的,通常以自有域名好比com.tennetcn.free这种,当前还能够是github的用户,能够填写com.github.chfree这种。不论填写哪一种应该都是有相应的验证规则,我是自有域名,进行了域名的TXT解析验证
  • Project URL:能够填写你开源项目的地址
  • SCM URL:能够与project url地址同样
  • Already Synced to Centra:是否准备好同步到中央仓库,选择yes的话则会覆盖以前的构建。

而后点击新建就能够了,若是时间凑巧,可能立刻就有人回复工单,若是是自有域名,则须要进行一下TXT解析验证。web

切记:在别人回复了工单,你对工单的相关信息或对域名进行了解析操做,必定进行一下Comment操做,相似告诉当前工单处理人,我已经按你的操做进行了,你在看一下的意思。否则你傻等半天都不会有一下步的工单进度处理。spring

最后成功会有如下回复,且工单状态会变为已解决,若是你最后上传成功了,能够回来关闭此问题,其实用过jira之类的缺陷管理系统,这点就很好理解了。shell

com.tennetcn.free has been prepared, now user(s) chfree can:

Deploy snapshot artifacts into repository https://oss.sonatype.org/content/repositories/snapshots
Deploy release artifacts into the staging repository https://oss.sonatype.org/service/local/staging/deploy/maven2
Release staged artifacts into repository 'Releases'
please comment on this ticket when you promoted your first release, thanks
复制代码

gpg加密处理

它是一种基于密钥的加密方式,使用了一对密钥对消息进行加密和解密,来保证消息的安全传输。

windowsmaclinux都有相应的使用方式。

windows下分为如下六步,我以为是命令行如下六步均可以

  1. 下载安装GPG环境
    下载地址:www.gpg4win.org/

  2. 检查是否安装成功
    打开cmd命令行窗口,输入

gpg --version
复制代码

执行后成功输出gpg版本即为安装成功

  1. 生成密钥
    命令行执行
gpg --gen-key
复制代码

根据提示输入用户名和邮箱以及Passphase,其他信息使用默认便可,Passphase即为密码,需记住,后续上传jar包时要用到

  1. 查看公钥
    执行
gpg --list-keys
复制代码

输出以下信息

/Users/chenghuan/.gnupg/pubring.kbx
--------------------------------------------------------
pub   rsa4096 2020-04-24 [SC] [有效至:2024-04-24]
      29B9DBA6638B7D0DCFFA84ECBB95DD3381441B80
uid           [ 绝对 ] chfree <chfree365@qq.com>
sub   rsa4096 2020-04-24 [E] [有效至:2024-04-24]
复制代码

其中的十六进制串29B9DBA6638B7D0DCFFA84ECBB95DD3381441B80即为生成的公钥id

  1. 发布公钥 执行
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 29B9DBA6638B7D0DCFFA84ECBB95DD3381441B80
复制代码

将公钥发布到PGP密钥服务器后,即可以使用本地的私钥来对上传构件进行数字签名,而下载该构件的用户可经过上传的公钥来验证签名,也就是说,你们能够验证这个构件是否由本人上传的,由于有可能该构件被坏人给篡改了。

  1. 验证是否发布成功
    执行
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 29B9DBA6638B7D0DCFFA84ECBB95DD3381441B80
复制代码

成功输出gpg密钥信息即为发布成功

我是用的mac上的一个GPG Keychain,下载地址为gpgtools.org/更傻瓜式的界面操做。

项目打包上传

须要将项目打成jar包上传到中央仓库,在打jar包的过程当中就须要用到咱们gpg生成的秘钥信息,固然最主要的仍是配置pom文件

配置setting.xml

setting中,主要配置咱们第一步中注册的帐户和密码,由于setting.xml是本地的,而pom.xml是要上传到源码服务器中,因此是在setting.xml中。

能够找到ide对应的maven配置项,当前ide对应的setting.xml在哪一个路径,若是没有配置,能够下载一个apache-maven的包,解压后里面有setting.xml进行配置

setting.xml中配置以下:

<server>
  <id>maven_nexus_repo</id>
  <username>username</username>
  <password>password</password>
</server>
复制代码

这个id在后面配置pom.xml的时候还会用到,在进行deploy操做的时候,就是根据id名称从这个setting.xml中提取用户名和密码进行上传权限验证。

配置pom.xml

相关的xml配置及上传会验证的doc jarsource jar的插件配置包,都已经贴到下面,须要注意的是licensesdevelopersscm几个节点在编译及上传过程不须要,可是在发布构建的时候,会进行检查,没有就会检查不经过,因此仍是一开始就补全好点。

上传就很简单,直接mvn deploy便可,若是是idea,在maven的工具栏,选择相应的项目进行deploy操做便可

注意:若是在编译的过程当中下载不到相关的jar包,你要看下,下载jar是在哪一个地址下载,若是是repo1.maven.org这个中央仓库,就要注意是http仍是https,发现是http那就要修改下setting.xml中的仓库连接里面的httphttps,由于maven.org已经不支持http了。

<modelVersion>4.0.0</modelVersion>
<groupId>com.tennetcn.free</groupId>
<artifactId>think-swagger-ui-starter</artifactId>
<packaging>jar</packaging>
<version>0.0.4</version>
<description>swagger-ui</description>
<url>https://github.com/chfree/think-free-base</url>

<licenses>
    <!-- MIT许可证 -->
    <license>
        <name>MIT License</name>
        <url>http://www.opensource.org/licenses/mit-license.php</url>
    </license>
    <!-- Apache许可证 -->
    <!-- <license> <name>The Apache Software License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> </license> -->
</licenses>
<developers>
    <developer>
        <name>chfree</name>
        <email>chfree365@qq.com</email>
        <url>http://www.tennetcn.com</url>
    </developer>
</developers>

<scm>
    <tag>master</tag>
    <connection>https://github.com/chfree/think-free-base</connection>
    <developerConnection>https://github.com/chfree</developerConnection>
    <url>https://github.com/chfree/think-free-base/tree/master/think-swagger-ui-starter</url>
</scm>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-gpg-plugin</artifactId>
        <version>1.6</version>
    </dependency>
</dependencies>

<profiles>
    <profile>
        <id>ossrh</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <plugins>
                <!-- 要生成Javadoc和Source jar文件,您必须配置javadoc和源Maven插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>attach-sources</id>
                            <goals>
                                <goal>jar-no-fork</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>attach-javadocs</id>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!-- 必须配置GPG插件用于使用如下配置对组件进行签名 -->
                <!-- GPG -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-gpg-plugin</artifactId>
                    <version>1.6</version>
                    <executions>
                        <execution>
                            <phase>verify</phase>
                            <goals>
                                <goal>sign</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
        <distributionManagement>
            <snapshotRepository>
                <!-- 这个id须要在setting.xml中设置 -->
                <id>maven_nexus_repo</id>
                <name>maven_nexus_repo</name>
                <!-- 这里的url就是Issue中回复的snapshots 的repo地址-->
                <url>https://oss.sonatype.org/content/repositories/snapshots</url>
            </snapshotRepository>
            <repository>
                <id>maven_nexus_repo</id>
                <name>maven_nexus_repo</name>
                <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
            </repository>
        </distributionManagement>
    </profile>
</profiles>
复制代码

构件仓库操做

当全部的上传操做处理完,就须要登陆到构建发布地址,由于如今全部的操做都是将咱们的jar包发布到了缓存仓库,须要进行后续操做才是发布到正式仓库,不然在search.maven.org中怎么都是搜索不到的。

构建发布地址:oss.sonatype.org/#welcome

用户名和密码就是第一步中申请的的用户名和密码。

登录后在左边有一些菜单,在Staging Respositories下就能看到咱们上次的缓存jar列表,勾选对应的数据,点击上面工具栏的close,先关闭缓存状态。等待一下子,刷新当前记录,记录不是open后,就能够勾选点击release

若是上传的jar不符合规范,通常是pom中不规范或是没有doc jar,source jar等状况,及会在close的时候会提示出相关异常,咱们只须要解决相关异常便可从新上传,此时是不须要改版本号。

当你进行了release后,你的注册帐号的邮箱就会收到一封邮件,告诉你发布成功了,可是在search.maven.org中搜索到还须要2小时左右。但你基本就能够经过pom来下载你的jar了。

相关文章
相关标签/搜索