首页 > 其他分享 >如何将自己的项目发布到Maven中央仓库

如何将自己的项目发布到Maven中央仓库

时间:2023-05-26 20:24:38浏览次数:47  
标签:maven github plugin 仓库 中央 Maven Sonatype https org

注册Sonatype的账户

注册地址,Sonatype通过JIRA来管理OSSRH仓库。JIRA是一个项目管理服务,类似于国内的Teambition。
密码校验比较严格,最少12位,包含小写字母,大写字母,数字,还必须包含特殊字符如&, %。

项目的发布申请

创建一个issue,类型为New Project

创建成功之后就等待官方审核。

审核过程

主要就是通过issue的评论来继续进行的,主要是验证groupId对应的域名是否是我们拥有的。我们使用第二种方式,使用github的域名,对应的groupId为io.github.strongmore168,strongmore168为我的github账号,在github账号下创建一个空项目,名称为OSSRH-89128,就是issue的ID。然后在评论区回复一下。官方回复还是很快的。

安装并配置GPG

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

命令提示符输入gpg --version,有输出表示安装成功。

生成密钥对

一个私钥,一个公钥,使用私钥对文件进行签名,将公钥分发到公钥服务器供其他用户下载,其他用户就可以使用公钥对签名进行验证。

gpg --gen-key

过程中需要输入用户名,邮箱和密码。密码后续要用。

将公钥信息上传到公共的公钥服务器

gpg --list-keys #查询本地公钥
gpg --list-secret-keys #查询本地私钥
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 773A9FB255ACEF00A42B8899BBAC244C65EC33AF #上传到服务器,773A9FB255ACEF00A42B8899BBAC244C65EC33AF为上面查询到的

配置Maven的setting.xml

setting.xml为Maven的全局配置文件,路径为C:\Users\xxx\.m2,将注册Sonatype的账户时配置的Username和Password添加到servers标签中,这样才能将jar包部署到Sonatype OSSRH仓库:

<server>
  <id>sonatype-nexus-snapshots</id>
  <username>Sonatype账号</username>
  <password>Sonatype密码</password>
</server>

如果密码包含特殊字符,要转义,如&->&amp;

配置项目的pom.xml

根据Sonatype OSSRH的要求,以下信息都必须配置:

  • Supply Javadoc and Sources
  • Sign Files with GPG/PGP
  • Sufficient Metadata
  • Correct Coordinates
  • Project Name, Description and URL
  • License Information
  • Developer Information
  • SCM Information
点击查看完整的pom文件
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.github.strongmore168</groupId>
    <artifactId>mylombok</artifactId>
    <version>1.0-RELEASE</version>

    <name>Project MyLombok</name>
    <url>https://github.com/strongmore168/mylombok</url>
    <description>the simple lombok</description>

    <licenses>
        <license>
            <name>BSD 3-Clause</name>
            <url>https://spdx.org/licenses/BSD-3-Clause.html</url>
        </license>
    </licenses>
    <scm>
        <connection>https://github.com/strongmore168/mylombok.git</connection>
        <url>https://github.com/strongmore168/mylombok</url>
    </scm>
    <developers>
        <developer>
            <name>strongmore</name>
            <email>[email protected]</email>
            <roles>
                <role>Developer</role>
            </roles>
            <timezone>+8</timezone>
        </developer>
    </developers>

    <dependencies>
        <dependency>
            <groupId>com.sun</groupId>
            <artifactId>tools</artifactId>
            <version>1.8.0</version>
            <scope>system</scope>
            <systemPath>C:\\Users\\xxx\\Downloads\\tools-1.8.0.jar</systemPath>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>META-INF/**/*</exclude>
                </excludes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>process-META</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>target/classes</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>${basedir}/src/main/resources/</directory>
                                    <includes>
                                        <include>**/*</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <!-- Source -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>2.2.1</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- Javadoc -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>3.1.0</version>
                        <configuration>
                            <show>private</show>
                            <nohelp>true</nohelp>
                            <charset>UTF-8</charset>
                            <encoding>UTF-8</encoding>
                            <docencoding>UTF-8</docencoding>
                            <additionalparam>-Xdoclint:none</additionalparam>
                            <javadocExecutable>C:/D-myfiles/java/jdk/java-se-8u42-ri/bin/javadoc.exe</javadocExecutable>
                            <!-- TODO 临时解决不规范的javadoc生成报错,后面要规范化后把这行去掉 -->
                        </configuration>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- 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>
                    <!--Release -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-release-plugin</artifactId>
                        <version>2.5.1</version>
                    </plugin>
                </plugins>
            </build>

            <distributionManagement>
                <snapshotRepository>
                    <id>sonatype-nexus-snapshots</id>
                    <name>Sonatype Nexus Snapshots</name>
                    <url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
                </snapshotRepository>
                <repository>
                    <id>sonatype-nexus-snapshots</id>
                    <name>Nexus Release Repository</name>
                    <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
                </repository>
            </distributionManagement>
        </profile>
    </profiles>
</project>

其中snapshotRepository便是在setting.xml中定义的server的id。远程仓库地址https://s01.oss.sonatype.org来自于issue中官方回复的评论。

发布jar包

mvn clean deploy -P release

执行上述命令,打包并上传,release便是上面配置的profile元素的id。在执行的过程中需要输入上面gpg生成key时设置的密码。

查看发布jar包

查看地址

可以看到close失败的原因。注意,这个网站很卡,不要使用VPN,使用了更卡。尝试了很多次终于close成功了。close成功之后再点击release发布。发布成功之后,邮件中(注册sonatype时填写的)会收到issue变化的信息,提示同步已经被激活,正常10分钟就可以更新同步。

image

实践过程中发现十分钟之内已经成功同步到https://repo1.maven.org/的中央仓库当中。

image

此时在项目中就可以引入此依赖了,至此项目发布maven中央仓库成功。

<dependency>
  <groupId>io.github.strongmore168</groupId>
  <artifactId>mylombok</artifactId>
  <version>1.0-RELEASE</version>
</dependency>

deploy过程中遇到的问题

An API incompatibility was encountered while executing org.apache.maven.plugins:maven-javadoc-plugin:2.9.1:jar: java.lang.ExceptionInInitializerError: null

maven-javadoc-plugin版本太低,改成3.1.0版本就好了

参考

如何发布自己的项目到Maven中央仓库?
GPG(GnuPG)的安装和使用

标签:maven,github,plugin,仓库,中央,Maven,Sonatype,https,org
From: https://www.cnblogs.com/strongmore/p/17435714.html

相关文章

  • linux服务器安装maven
    maven官网地址https://maven.apache.org/download.cgi  使用scp命令将文件上传到服务器 [email protected]:/root/maven.tar.gz请注意这里的p不要小写了,小写报错如下 进入root目录tar-zxvfmaven.tar.gz......
  • 把本地的jar包添加到工程中,当maven打包时自动带上本地的jar包
    1,先把本地jar包放到工程的resources目录下面2,然后在pom.xml中添加依赖<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version><scope>syste......
  • springboot2.7使用log4j2的maven配置
    先排查自带的<!--排除自带的--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions>......
  • docker部署gitlab私有仓库
    官方文档https://docs.gitlab.com/ee/install/docker.html编写docker-compose文件version:'3.6'services:web:image:'gitlab/gitlab-ee:latest'restart:alwayshostname:'192.168.31.160'ports:-'5111:80&......
  • Maven 父子项目
    1、创建父项目cmd进入项目工作目录,执行以下代码:mvnarchetype:generate 创建成功,接着修改pom.xml如下:<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/......
  • Maven 基本操作
    1、创建项目在Maven核心概念已经介绍过了,这里不在分析 2、操作项目以下操作Maven项目的方式除去创建外,必须进入到pom.xml所在的目录。如果没有在pom.xml所在的目录运行Maven的构建命令,那么会看到下面的错误信息 (1)、编译项目cmd进入pom.xml所在的目录执行以下......
  • Maven 基本概念
    1、核心基本参数(1)、定位jar包参数groupId:公司或组织的idartifactId:一个项目或者一个项目中的模块idversion:版本号现有如下xml配置<groupId>group.aaa</groupId><artifactId>test-api</artifactId><version>6.6</version>寻址路径就是Maven本地仓库根目录\group\a......
  • JAVA语言开发springboot框架实现的自动化立体智慧仓库WMS
    技术架构技术框架:SpringBoot+layui+HTML+CSS+JS运行环境:jdk8+IntelliJIDEA+maven3+宝塔面板宝塔部署教程回到IDEA,点击编辑器右侧maven图标,执行package,完成后就会在根目录里生成一个target目录,在里面会打包出一个jar文件。宝塔新建一个数据库,导入数据库文件,数据......
  • CentOS7安装maven私服仓库nexus3教程
    大家好,我是程序员青戈,一个被Bug耽误了才艺的程序员......
  • 使用resource读取properties文件,出现Cause: java.sql.SQLException: No suitable driv
    ###Errorqueryingdatabase.Cause:java.sql.SQLException:Nosuitabledriverfoundforhttp://maven.apache.org###Theerrormayexistincom/louis/dao/UserMapper.xml###Theerrormayinvolvecom.louis.dao.UserMapper.getUserList###Theerroroccurred......