zoukankan      html  css  js  c++  java
  • 向Maven中央仓库发布组件

    maven

    一般,我们如果开发了一个工具组件,肯定想将它发布以供其他人使用。在公司内部,我们可以将其发布到私有仓库,在互联网环境,我们一般将其发布到 maven 中央仓库。以下以我们最近开发的java工具 flyRafter 进行介绍,如何将一个组件发布到 maven 中央仓库。

    首先,我们先要确保组件能正确编译为 jar 包,在这个前提下,我们先提前配置我们项目的 pom.xml ,以便发布时使用。

    1. 项目基本信息配置
        <groupId>fun.mortnon</groupId>
        <artifactId>flyrafter</artifactId>
        <version>0.0.1</version>
        <packaging>jar</packaging>
    
        <name>${project.artifactId}</name>
        <url>https://gitee.com/mortise-and-tenon/flyrafter</url>
        <description>generate sql file from java entity class.</description>
    

    这里配置项目的最重要的 groupIdartifactIdname等。

    需要注意,按照中央库的要求,如果向 maven 中央库提交组件,你需要拥有 groupId 使用的域名,如果你没有域名,你也可以使用托管环境的域名作为 groupId。比如你项目在 github上,你的用户名叫 ME,你的 groupId 可以是 com.github.me

    1. 组件的开源协议
    <licenses>
            <license>
                <name>MIT License</name>
                <url>https://opensource.org/licenses/MIT</url>
                <distribution>repo</distribution>
            </license>
        </licenses>
    

    你用什么协议,就配置相应协议即可。

    1. 项目的源码地址及所属开发者信息
        <scm>
            <url>http://mortnon.fun</url>
            <connection>scm:git:https://gitee.com/mortise-and-tenon/flyrafter.git</connection>
            <developerConnection>scm:git:https://gitee.com/mortise-and-tenon/flyrafter.git</developerConnection>
        </scm>
    
        <developers>
            <developer>
                <name>mortnon</name>
                <email>mortnon@outlook.com</email>
                <organization>卯榫 mortise-and-tenon</organization>
                <organizationUrl>https://mortnon.fun</organizationUrl>
            </developer>
        </developers>
    

    在这里填写你的项目地址、托管的SCM地址,以及所属开发者的介绍信息。

    1. 发布仓库配置
        <distributionManagement>
            <snapshotRepository>
                <id>ossrh</id>
                <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
            </snapshotRepository>
            <repository>
                <id>ossrh</id>            <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
            </repository>
        </distributionManagement>
    

    这里配置的仓库地址,是中央库最新的地址,新项目都将提交到这里。

    注意 idossrh,这个值要与后面在本地 maven 的 setting.xml 配置的 值一致,保持与官方说明使用的 ossrh 一致最简单。

    1. 插件配置
                <build>
                    <plugins>
                        <plugin>
                            <groupId>org.sonatype.plugins</groupId>
                            <artifactId>nexus-staging-maven-plugin</artifactId>
                            <version>1.6.7</version>
                            <extensions>true</extensions>
                            <configuration>
                                <serverId>ossrh</serverId>
                                <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
                                <autoReleaseAfterClose>true</autoReleaseAfterClose>
                            </configuration>
                        </plugin>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-source-plugin</artifactId>
                            <version>2.2.1</version>
                            <executions>
                                <execution>
                                    <id>attach-sources</id>
                                    <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>
                            <executions>
                                <execution>
                                    <id>attach-javadocs</id>
                                    <goals>
                                        <goal>jar</goal>
                                    </goals>
                                </execution>
                            </executions>
                            <configuration>
                                <additionalJOptions>
                                    <additionalJOption>-Xdoclint:none</additionalJOption>
                                </additionalJOptions>
                            </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>
                                </execution>
                            </executions>
                        </plugin>
                    </plugins>
                </build>
    

    以上插件是发布到中央库所需要的,与项目本身编译没有直接关系。由于涉及到 source、doc的编译生成,如果只是本地调试,会增加编译耗时,所以官方也建议将这些与发布相关的插件通过 profile进行区分配置,将这些发布相关插件放到发布的 profile中,如:

        <profiles>
    		...
            <profile>
                <id>release</id>
                <build>
                    <plugins>
                        ...
                    </plugins>
                </build>
            </profile>
        </profiles>
    

    以上为对项目的 pom.xml 进行配置的介绍。以下介绍对本地 maven 的 setting.xml进行配置介绍。打开本地 maven 工具的目录,进入 conf 目录下,就可以看到 setting.xml文件。打开此文件,按如下添加内容:

    1. profiles 节点添加内容
    	<profile>
          <id>ossrh</id>
          <activation>
            <activeByDefault>true</activeByDefault>
          </activation>
          <properties>
            <gpg.executable>gpg</gpg.executable>
            <gpg.passphrase>the_pass_phrase</gpg.passphrase>
          </properties>
        </profile>
    

    注意这里的gpg是在发布时调的命令,根据gpg的版本,这里也可以是 gpg2,而 passphrase代表你的私钥的密码,这里可不用填写,在发布时,一般还会弹窗要求输入。

    1. servers 节点添加内容
    <server>
          <id>ossrh</id>
          <username>NAME</username>
          <password>PWD</password>
        </server>
    

    注意这里的用户名和密码,是中央库 sonatype 的用户名与密码,后面将介绍相关的使用,注册地址为 sonatype

    以上发布插件、maven setting.xml 中都涉及gpg配置,因为项目编译后发布前要使用gpg进行签名校验,所以我们需要先用这个工具生成公私钥。Linux 环境下这个工具很简单,此处不讨论,仅讨论 Windows 环境下。

    我们先去gpg4win 官方下载 Windows 环境的安装包,地址:gpg4win。下载页面上,会让你选择是否使用 paypal 捐助,没钱选择捐 0 元,直接下载即可。下载成功后,双击安装程序,按提示不断下一步安装即可。

    安装成功后,打开gpg4win(名为Kleopatra,图标头像是一个齐留海的女头),如果出现如下提示信息 “Kleopatra cannot be run as administrator without breaking file permissions in the GnuPG data folder.”。遇到这种情况,可以直接点击另一个安装时生成的快捷图标 GPA 来打开gpg应用,然后点击图标中靠右的 Keyring 来打开生成界面。

    kelopatra

    gpa

    gpa2

    在GPA界面中点击生成新的密钥,按照提示一步步操作即可,注意记住自己的密钥的密码。密钥生成成功后,右键点击密钥,然后选择“Send Keys”,将公钥发送给服务器。

    以上所有配置、操作完成后,本地的配置基本完成。以下进入 sonatype 进行账号注册。

    进入官网sonatype,注册一个账号,注意密码要有大小写和特殊符号。注册成功后,点击上方的“新建”,然后新建一个问题(issue),选择项目Community Support - Open Source Project Repository Hosting (OSSRH),问题类型选择 New Project

    • 概要输入自己的项目名称或者相应的描述即可。

    • Group Id输入自己项目的Group Id,注意上面提过的规则(要么用自己的域名,要么用托管网站的域名,官方文档Group Id)。

    • Project URL 输入自己的项目网站地址

    • SCM url 输入项目的git下载地址

    • 其他项保持默认为空,即可

    最后,点击新建,提交问题,然后等待官方回复操作指南。

    sonatype

    官方会提示,你确认是否拥有相应域名所有权,只要在域名的DNS解析中,添加一条txt记录,将内容填写为自己的问题单url即可,如果是托管网站的名字,如com.github.xxx,官方会直接检查。

    当DNS解析添加后,点击备注,添加一条备注,告诉已添加dns解析即可。

    官方审核后,会给出上传组件的指导手册,手册中会指导如何在pom.xml中添加配置,也就是我们上面介绍的配置。在此,我们就去进行发布即可,可以先回到上面的setting.xml中添加自己的 sonatype 账号和密码。

    在本地的命令行中对项目执行mvn发布命令 mvn clean deploy 即可在编译成功后,并将组件发布到中央库 stage 库中。同时,如果 artifact id 不以 -SNAPSHOT 结尾的话,mvn 的 stage 插件会自动将stage 库的组件正式发布到公开仓库中。

    需要注意,如果 pom.xml 使用了 profile 对开发、发布进行了区分,发布命令中需要带上指定的 profile 名称,如 mvn clean deploy -Prelease,而更多的参数可以按照 mvn 命令的说明进行添加

    发布后,我们可以在仓库中搜索发布的组件,地址:Nexus Repository Manager,并且,如果组件处于 stage 库,可以在这里管理。官方也提示,发布后可以直接在[仓库](Central Repository: (maven.org))中查看,但要在Maven Central Repository Search查看的话,需要等2小时。

    sonatype

    以上,就是整个组件向中央库发布的操作过程。以上示例中,我们发布了最后开发的 flyRafter 第一个预览版,这个工具是用于 java 中将 @Entity 注解的实体类自动生成建表 SQL 文件的工具,同时,它结合 flyway 使用,可以达成效果:

    不用单独写sql定义表,只要建好数据库,在实体类中定义好字段名称和定义,就可以动态的对数据库表进行变化,类似于 Hibernate的 ddl-auto:update,但比它更好用。

    gitee地址: FlyRafter: 实体转为SQL,并结合flyway应用的工具 (gitee.com),maven 地址:Maven FlyRafter该工具正在完善中,欢迎大家试用,并提交 issue。

    欢迎关注我的博客:阿呜的边城

    欢迎关注我的公众号:阿呜的编程

  • 相关阅读:
    JSON,数组根据字段多次分组
    .net c#后台请求接口
    数组的高级应用含ES6 for of 用法
    js获取当前页面url网址信息
    资源管理神器Clover
    ES6的7个实用技巧
    单标签实现气泡三角形
    移动端--上拉加载更多
    checkbox对齐-复选框图标
    textarea显示源代码
  • 原文地址:https://www.cnblogs.com/dev2007/p/14751086.html
Copyright © 2011-2022 走看看