上传代码到maven中央仓库

573 阅读3分钟

记录发布工具类到maven仓库遇到的问题

1. 账号创建

注册Sonatype的账户, 注册地址 这个地址是国外的,访问可能有点慢.注册的时候,用户名邮箱和密码一定需要基础,并且是常用的信息.后面需要用的上 注册登录进去的界面如下

2. 新建项目

项目名称言简意赅,描述该工程的功能.并且是独一无二的,GroupId 是你有权限的域名.可以是个人的域名,也可以是你代码仓库的域名 码云或者github都行.项目路径和SCM路径为你所要上传的项目所在的仓库地址

Project: Community Support - Open Source Project Repository Hosting (OSSRH)
Issue TypeRequired: New Project

Summary: Jar包的名称
Group Id:cn.snowheart
Project URL:项目站点,如:https://gitee.com/snowheart/dingtalk-robot
SCM url:项目源码仓库,如:https://gitee.com/snowheart/dingtalk-robot.git

创建好了之后,就等待认证了.会有邮箱回复,回复的地址需要你配置到本地的xml和pom文件中

3. 账号认证

在此中间需要一系列的认证,maven中心会给你发邮箱.让你在仓库创建一个空项目.指定名称和group的 来确保操作的是你本人.并且由于存在时差.只能在Sonatype通过评论进行交流.回复的也不是很及时.

4. 上传工作的准备

1. maven 配置文件修改

  1. 配置 setting.xml文件 .添加 这个是上面注册的账号和密码
<server>
  <id>sonatype-nexus-snapshots</id>
  <username>Sonatype账号</username>
  <password>Sonatype密码</password>
</server>
<server>
  <id>sonatype-nexus-staging</id>
  <username>Sonatype账号</username>
  <password>Sonatype密码</password>
</server>

2. 项目的pom文件修改

增加许可证,scm信息,开发者信息

  1. 项目所在仓库可以申请开源licens许可证 ,并添加到项目中
  2. 添加scm信息
  3. 添加 开发者信息
<description>
        this is a util jar about operation excel,word. You can use the encapsulated method to generate Word or Excel on your own
    </description>
    <url>https://gitee.com/bodboy/poi-util</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>
    <scm>
        <tag>poi-utils-0.0.1</tag>
        <url>git@gitee.com:bodboy/poi-util.git</url>
        <connection>scm:git:git@gitee.com:bodboy/poi-util.git</connection>
        <developerConnection>scm:git:git@gitee.com:bodboy/poi-util.git</developerConnection>
    </scm>
    <developers>
        <developer>
            <name>xiongchao</name>
            <email>1374543195@qq.com</email>
            <organization>https://gitee.com/bodboy/poi-util</organization>
        </developer>
    </developers>
  1. 发布信息配置
 <!-- 发布管理信息 -->
    <distributionManagement>
        <repository>
            <!-- 这里的id必须要和全局配置中的release id 一致 -->
            <id>sonatype_releases</id>
            <name>Nexus Release Repository</name>
            <!-- 这里就是在创建issue成功后,对方回复的release发布地址-->
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
        </repository>
        <snapshotRepository>
            <!-- 这里的id必须要和全局配置中的snapshot id 一致 -->
            <id>sonatype_snapshots</id>
            <name>Nexus Snapshot Repository</name>
            <!-- 这里就是在创建issue成功后,对方回复的snapshot发布地址-->
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
    </distributionManagement>
  1. 发布版本配置
<profiles>
        <profile>
            <id>jdk-1.8</id>
            <activation>
                <activeByDefault>true</activeByDefault>
                <jdk>1.8</jdk>
            </activation>
            <properties>
                <maven.compiler.source>1.8</maven.compiler.source>
                <maven.compiler.target>1.8</maven.compiler.target>
                <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            </properties>
        </profile>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>2.1.2</version>
                        <executions>
                            <execution>
                                <id>attach-sources</id>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
  1. 发布所需的插件
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-scm-plugin</artifactId>
                        <version>1.8.1</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-scm-plugin</artifactId>
                <version>1.8.1</version>
            </plugin>
            <plugin>
                <groupId>org.sonatype.plugins</groupId>
                <artifactId>nexus-staging-maven-plugin</artifactId>
                <version>1.6.7</version>
                <extensions>true</extensions>
                <configuration>
                    <serverId>sonatype_releases</serverId>
                    <nexusUrl>https://oss.sonatype.org/</nexusUrl>
                    <autoReleaseAfterClose>true</autoReleaseAfterClose>
                </configuration>
            </plugin>
            <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>
                        <configuration>
                          <executable>C:/Program Files (x86)/GnuPG/bin/gpg.exe</executable>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.1.2</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.9.1</version>
                <configuration>
                    <aggregate>true</aggregate>
                    <charset>UTF-8</charset>
                    <encoding>UTF-8</encoding>
                    <docencoding>UTF-8</docencoding>
                    <additionalparam>-Xdoclint:none</additionalparam>
                </configuration>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
                <executions>
                    <execution>
                        <id>default-deploy</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>deploy</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

5. 配置pgp的公私钥信息

  1. Windows下使用gpg4win来进行配置。下载地址
  2. 安装好之后,打开cmd控制台,使用gpg --list-keys命令来查询自己配置的key 如果提示gpg不是可执行程序或命令,请配置Path路径到 GnuPGbin目录
  3. 生成密钥的命令 gpg --gen-key,过程中需要使用到姓名、邮箱等信息,这里的配置最好和Sonatype注册信息、pom文件配置信息保持一致,以免不必要的麻烦。
  4. 生成的过程中,会有个弹框要求输入Passphase信息,这个是密钥的密码,同样需要记牢。发布签名的过程中会用得到。

使用 gpg --list-keys 命令查询配置好的公私钥信息,使用 gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys <公钥key> 将公钥信息发送到ubuntu.com服务器,后续推送maven仓库会做校验。

6. 上传准备

上传指令 mvn clean deploy -P <profile-id> 打包过程中会要求输入gpg密钥的Passphase信息,输入即可

7. 发布

网上一般说的需要去https://oss.sonatype.org/#stagingRepositories 查看发布状态,我这边印象中都是自动部署的 大概两小时后可以看到你发布的