【TOOLS】Project 2 Maven Central

发布自己的项目到maven中央仓库

Maven Central Account

  1. 访问:https://central.sonatype.com/,点击右上角,根据提示注册账号
  2. 构建User token ,用于访问中央仓库的API:
    • 点击右上角,查看账户
    • 点击Generate User Token,根据提示,构建个人访问令牌
    • 将获取的User Token xml代码配置到maven配置文件settings.xml 的servers属性中

POM.xml

配置需要发布的项目中的POM.xml文件

  1. 配置编译项目的java版本
xml 复制代码
<properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <java.version>11</java.version>
</properties>
  1. 配置项目名称、项目地址、打包方式
xml 复制代码
<name>xx xx</name>
<description>desc</description>
<url>https://github.com/xx/xx.xx.xx</url>
<packaging>pom</packaging>
  1. 配置私库地址
    • 仓库地址分为正式版(releases repository)和预览版(snapshot repository)
    • id:在settings.xml中配置的server id
    • name:仓库名称
    • ur:对应的私库地址
xml 复制代码
<distributionManagement>
    <repository>
        <id>central</id>
        <name>Maven Central</name>
        <url>https://repo.maven.apache.org/maven2</url>
    </repository>
</distributionManagement>
  1. 配置开发者信息、项目开源许可证、代码仓库地址
xml 复制代码
<developers>
        <developer>
            <id>000000000</id>
            <name>xxxxxxx</name>
            <email>000000000@qq.com</email>
        </developer>
    </developers>

    <licenses>
        <license>
            <name>MIT License</name>
            <url>https://opensource.org/licenses/MIT</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <scm>
        <connection>https://github.com/xx/xx.xx.xx.git</connection>
        <url>https://github.com/xx/xx.xx.xx</url>
    </scm>
  1. 配置打包插件

    • maven-source-plugin:源代码打包工具,中央仓库也会对源代码进行验证
    • maven-javadoc-plugin:javadoc文档打包工具,中央仓库会对javadoc经行验证,没有文档会验证失败
xml 复制代码
<build>
    <plugins>
       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>${maven-source-plugin.version}</version>
            <inherited>true</inherited>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <excludeResources>true</excludeResources>
                <useDefaultExcludes>true</useDefaultExcludes>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>${maven-javadoc-plugin.version}</version>
            <inherited>true</inherited>
            <executions>
                <execution>
                    <id>bundle-sources</id>
                    <phase>package</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <encoding>UTF-8</encoding>
                <charset>UTF-8</charset>
                <show>protected</show>
                <notree>true</notree>
                <failOnError>false</failOnError>
                <doclint>none</doclint>
            </configuration>
        </plugin>
    </plugins>
</build>
  1. 配置发布插件

    • central-publishing-maven-plugin:中央仓库发布插件
    • maven-deploy-plugin maven:maven发布插件,任何仓库都需要这个插件
    • maven-gpg-plugin:对发布的项目文件进行签名,中央仓库会对文件进行验签,GPG签名详见:https://central.sonatype.org/publish/requirements/gpg/
xml 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>${maven-deploy-plugin.version}</version>
        </plugin>
        <plugin>
            <groupId>org.sonatype.central</groupId>
            <artifactId>central-publishing-maven-plugin</artifactId>
            <version>${central-publishing-maven-plugin.version}</version>
            <extensions>true</extensions>
            <configuration>
                <publishingServerId>central</publishingServerId>
                <autoPublish>true</autoPublish>
                <waitUntil>published</waitUntil>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <version>${maven-gpg-plugin.version}</version>
            <executions>
                <execution>
                    <id>sign-artifacts</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>sign</goal>
                    </goals>
                    <configuration>
                        <keyname>288F5FE69C7B21AB</keyname>
                        <passphraseServerId>288F5FE69C7B21AB</passphraseServerId>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

发布

  1. 运行发布命令
shell 复制代码
mvn deploy
  1. 等待maven central验证,如果发布状态不是published,那么就是发布失败,需要根据提示进行相应的更改

FAQ

  1. Javadocs must be provided but not found in entries:因为中央仓库没找到Javadoc文档,所以需要打包Javadoc文档,java 1.8打包doc文档时,会报异常,建议提升至java11打包
  2. Illegal reflective access by lombok.javac.apt.LombokProcessor xxx:java11打包Lombok时,需要查看Lombok和java版本是否支持
相关推荐
你住过的屋檐28 分钟前
【Java】虚拟线程详解
java·开发语言
逍遥德29 分钟前
Maven教程.02-基础-pom.xml 使用标签大全
java·后端·maven·软件构建
甲枫叶1 小时前
【claude热点资讯】Claude Code 更新:手机遥控电脑开发,Remote Control 功能上线
java·人工智能·智能手机·产品经理·ai编程
额,不知道写啥。1 小时前
P5354 [Ynoi Easy Round 2017] 由乃的 OJ
java·开发语言·算法
让我上个超影吧1 小时前
消息队列——RabbitMQ(高级)
java·rabbitmq
Charlie_lll1 小时前
Redis脑裂问题处理——基于min-replicas-to-write配置
redis·后端
得物技术1 小时前
Sentinel Java客户端限流原理解析|得物技术
java·后端·架构
PM老周1 小时前
2026年软硬件一体化项目管理软件怎么选?多款工具对比测评
java·安全·硬件工程·团队开发·个人开发
一只大袋鼠2 小时前
并发编程(三):线程快照统计・grep+awk+sort+uniq 实战详解
java·开发语言·多线程·并发编程
unfeeling_2 小时前
Tomcat实验
java·tomcat