【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版本是否支持
相关推荐
TangKenny1 分钟前
计算网络信号
java·算法·华为
肘击鸣的百k路3 分钟前
Java 代理模式详解
java·开发语言·代理模式
城南vision9 分钟前
Docker学习—Docker核心概念总结
java·学习·docker
wyh要好好学习16 分钟前
SpringMVC快速上手
java·spring
尢词18 分钟前
SpringMVC
java·spring·java-ee·tomcat·maven
Mr. zhihao25 分钟前
享元模式在 JDK 中的应用解析
java·享元模式
茶馆大橘28 分钟前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
wrx繁星点点28 分钟前
享元模式:高效管理共享对象的设计模式
java·开发语言·spring·设计模式·maven·intellij-idea·享元模式
真的想不出名儿32 分钟前
Java基础——反射
java·开发语言
鱼跃鹰飞33 分钟前
大厂面试真题-简单说说线程池接到新任务之后的操作流程
java·jvm·面试