一、Maven中央仓库提交过程

① https://issues.sonatype.org 工单管理地址,就是申请上传资格和groupId 的地方。

② https://oss.sonatype.org/#welcome  构件仓库,把jar包上传到这里,Release 之后就会同步到maven中央仓库。

③ http://search.maven.org/  最终表现在可以在这里搜索到。

利用Sonatype OSSRH可以把jar等资源提交给Maven的中央仓库。

二、Sonatype OSSRH介绍

  Sonatype OSSRH使用Nexus 为开源项目提供仓库管理服务,该仓库就是所谓maven的中央仓库,OSSRH允许我们向Maven中央仓库提交二进制文件。

  1:提交(deploy)开发版本的二进制文件(snapshorts)

  2: 阶段性的发布版本

  3:发布一个release,然后同步他们到中央仓库。

三、工单使用

3.1、注册账号

https://issues.sonatype.org 注册一个帐号,注册地址,登录账号密码后续还要配置  maven  的setting.xml 中,然后创建一个工单,如下图(记住是先注册,下面是创建工单的图)。

3.2、创建工单

  将自己的jar提交maven中央仓

  将自己的jar提交maven中央仓

注意:

推荐设置方式

Group Id ,唯一标识,推荐使用com.github.xxxxx  ,xxxx要与github 用户名一致,会大概5分钟通过

  如果用的是其他的比如:com.sojson.core 之类的,管理员会问你这个是不是属于你的网站等等,官方文档:http://central.sonatype.org/pages/choosing-your-coordinates.html 

② ProjectURL ,填项目源码的地址,如果不想公布源码,那么填写一个只含README的项目的地址就可以了。

*其实管理员主要就是审核Group Id,其他的不重要

然后点击左侧列表中的Resolved recently 可以找到你刚创建的工单。

这时你的工单的状态Status 是Open ,等到审核通过状态会变为RESOLVED 

  将自己的jar提交maven中央仓

审查要求:

  • 1、提供JavaDoc和source
  • 2、使用gpg或者pgp对文件进行签名
  • 3、正确的坐标:groupId、artifactId、version
  • 4、projectName、description、url、license、developers、scm等信息

四、项目中的 pom.xml的基本配置

1、正确的坐标

    <groupId>com.github.bjlhx15</groupId>
    <artifactId>xgen</artifactId>
    <version>1.0-SNAPSHOT</version>

2、项目信息描述、liscens、开发者、scm软件配置管理

    <!-- 基础信息-->
    <name>${project.groupId}:${project.artifactId}</name>
    <description>mybatis plugins</description>
    <url>https://github.com/bjlhx15/xgen</url>
    <!--开源协议-->
    <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>
    <!--开发者信息-->
    <developers>
        <developer>
            <name>lihongxu</name>
            <email>bjlhx15@163.com</email>
            <url>https://github.com/bjlhx15/</url>
        </developer>
    </developers>
    <!-- 软件配置管理-->
    <scm>
        <url>https://github.com/bjlhx15/xgen</url>
        <connection>scm:git:https://github.com/bjlhx15/xgen.git</connection>
        <developerConnection>scm:git:https://github.com/bjlhx15/xgen.git</developerConnection>
    </scm>

五、打包部署

方式一、maven的方式

5.1、POM配置要上传的仓库地址

    <!--定义snapshots库和releases库的nexus地址-->
    <distributionManagement>
        <snapshotRepository>
            <id>sonatype-nexus-snapshots</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <repository>
            <id>sonatype-nexus-staging</id>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>

5.2、配置上传中央仓库的用户名密码

  配置到 户密码配置  需要在maven_home/conf/settings.xml配置jira的账号和密码【上文注册的】

与pom中的 

  <!--定义snapshots库和releases库的nexus地址-->

  <distributionManagement>

对应
 <server>
    <id>sonatype-nexus-snapshots</id>
    <username>https://issues.sonatype.org的账号</username>
    <password>https://issues.sonatype.org的密码</password>
  </server>
  <server>
    <id>sonatype-nexus-staging</id>
    <username>https://issues.sonatype.org的账号</username>
    <password>https://issues.sonatype.org的密码</password>
  </server>

5.3、POM 配置生成javadoc和sources包的插件【使用第五部分的profiles】

  新建组件的时候,必须发布javadoc和sources上去中央仓库,具体命名是通过你在 pom中定义的 groupId,artifactId和version,这个java开发者一般都很熟悉了,不再说明。

  最终打包的要求满足以下格式:artifactId-version-classifier.packaging 

    其中, artifactId 和 version 就不说了;关于classifier就是对这个包的说明,比如javadoc,或是sources, packaging表示包的形式,比如war、jar等

5.4、GPG加密和自动签名的插件

a》基础密钥生成

  使用gpg或者pgp对文件进行签名,发布到Maven仓库中的所有文件都要使用GPG签名,以保障完整性。因此,我们需要在本地安装并配置GPG。

  一般的发布文件都有一个对应的签名文件,即 .asc 文件

  注、使用gpg生成密钥,关于GPG的安装使用:https://www.cnblogs.com/bjlhx/p/9956706.html

mac安装:brew install gpg

  基本使用:gpg --version

  生成密钥对:gpg --gen-key

    期间会提示用户名,邮箱  输入密码等,可以看到生成了并放到用户的文件夹下,包含公钥和私钥,最下面那部分就是生成的结果。其中输入密码是乱码,因为是中文系统元婴

  查看本机包含的密钥对: gpg --list-keys  ;pub表示是公钥,而sub表示私钥。

将自己的jar提交maven中央仓

  发布公钥到GPG key-servers,非常的关键的,Sonatype 公司需要一个公钥来验证你deploy的文件,默认发送send-keys 应该是pub_key_id , D17AD4F314772283A415624……

gpg --keyserver hkp://pool.sks-keyservers.net:11371 --send-keys D17AD4F314772283A41562431AF7567……
gpg --keyserver hkp://pgp.mit.edu:11371 --send-keys D17AD4F314772283A41562431AF7567……
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys D17AD4F314772283A41562431AF7567……

   上传时候总是报错

    将自己的jar提交maven中央仓将自己的jar提交maven中央仓

尝试使用以下上传

gpg --keyserver hkp://keyserver.ubuntu.com:80 --send-keys D17AD4F314772283A41562431AF7567……

使用查看命令查看

gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys D17AD4F314772283A41562431AF7567…… 

b》POM 配置【使用第五部分的profiles】

5.5、使用Profile修改pom文件

应该javadoc和source的jar包生成也需要使用gpg来签名,所以很浪费时间,而且这些执行通常都独立于标准构建流程,所以把他们移动到一个profile.

因为插件也需要下载,可以使用pom中的dependencies下载后 在删除掉

        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils-core</artifactId>
            <version>1.8.3</version>
        </dependency>

        <!--打包插件-->
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.sonatype.plugins</groupId>
            <artifactId>nexus-staging-maven-plugin</artifactId>
            <version>1.6.8</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <version>1.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.9.1</version>
            <scope>provided</scope>
        </dependency>
View Code

相关文章:

  • 2022-01-24
  • 2021-07-10
  • 2021-06-26
  • 2021-09-04
  • 2022-12-23
  • 2021-10-11
  • 2022-12-23
  • 2021-08-28
猜你喜欢
  • 2021-11-15
  • 2021-06-06
  • 2022-01-06
  • 2021-04-10
  • 2022-12-23
  • 2021-11-15
相关资源
相似解决方案