java maven项目源码_Java开发|Maven中央仓库注册以及发布Java项目

49ce2bc488b44a91751d8a4377abd1a2.png
  • 1. 前言

  • 2. 注册 maven(oss)账号

    • 2.1 注册 JIRA 账号

    • 2.2 创建 issue

  • 3. 安装并配置 GPG

    • 3.1 安装 GPG

    • 3.2 生成 GPG 密钥对

    • 3.3 上传 GPG 公钥

  • 4. 配置 Maven 的 setting.xml

  • 5. 配置项目的 pom.xml

  • 6. 发布 jar 包

  • 7. close 并 release

  • 8. 参考链接

1. 前言

Maven 中央仓库之中包罗万象,无数优秀的开源 jar 包在其中声名远扬,那里可以说是任何一个 Java 程序员心目中的神圣宝地。

在我们漫长的编码生涯当中,或许你也封装过一些构思灵巧、使用方便的代码库,并且在生产环境中经受了极大的考验,在一定程度上很好地提高了生产力。

无论为是了分享,还是为了炫技,或是为了让别人把你写的代码按在地上摩擦,你想要把自己的代码打成 jar 包供他人调用。

把代码打成 jar 包并分享出去的方法有很多种,例如:用 mvn install 命令把现成的 jar 包安装到本地的 maven 仓库,然后在项目的 pom.xml 文件中配置依赖。另一种方式是,上传 jar 包到 maven 私有仓库(Nexus),然后开放出公共空间来供他人使用,像我们经常用到的阿里云镜像仓库,以及 CDH 的官方仓库等等。而今天重点要介绍的方式是,发布本地 jar 包到 maven 中央仓库,这样所有的 Java 开发者都可以使用 Maven(SBT、Gradle)直接导入依赖。

2. 注册 maven(oss)账号

Maven 中央仓库并不支持直接发布 jar 包。我们需要将 jar 包发布到一些指定的第三方 Maven 仓库,然后该仓库再将 jar 包同步到 Maven 中央仓库。

其中,最"简单"的方式是通过Sonatype OSSRH仓库来发布 jar 包。接下来,我会介绍如何将 jar 包发布到 Sonatype OSSRH。

本教程所使用的系统配置:

  • Apache Maven 3.6.3
  • macOS 10.15.2
  • jdk 1.8

2.1 注册 JIRA 账号

JIRA 是一个项目管理服务,类似于国内的 Teambition。Sonatype 通过 JIRA 来管理 OSSRH 仓库。

注册地址:https://issues.sonatype.org/secure/Signup!default.jspa

需要填写 Email, Full Name, Username 以及 password,其中 Username 与 Password 后面的步骤需要用到,请记下来。

注册页面如下:

c829f627f897f18d84a412b9261c1818.png
sign up

2.2 创建 issue

在 JIRA 上创建 issue 来申请发布新的 jar 包,Sonatype 的工作人员会进行审核,审核不算严格,一般按照要求填写不会有问题。

创建链接:

https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134

填写如下信息:

a8fd9e6f3a0d8f149c689f2289137ccb.png
create project

创建 issue 时候需要填写:

  • 项目概要
  • 项目描述
  • group id 对应着项目(pom.xml)的 group ip
  • Project URL 项目所在的 GitHub 地址,该项目可以是私有项目地址
  • SCM url 项目所在的 GitHub 地址的.git 地址

由于时差,前一天创建 issue,第二天早上才会有回应。当 issue 的 status 变为 RESOLVED,我们就可以进行下一步操作了。

3a7289d30c8f244cb6bbf31900c12b91.png
issue

如下图是审核的互动信息,其目的就是为了审核你这个 GitHub 地址是你自己所属的,当前 issue 的状态为已解决时,就可以进行如下的操作了。

e5000cc524d49272acfb146fea27eae5.png
shenhe

3. 安装并配置 GPG

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

3.1 安装 GPG

Mac 安装 GPG 非常简单,下载并安装GPG Suite即可。

windows 的下载地址:https://www.gpg4win.org

其具体安装过程可以参考:https://www.jianshu.com/p/923913d904fb

3.2 生成 GPG 密钥对

gpg --gen-key

生成密钥时将需要输入 name、email 以及 password。password 在之后的步骤需要用到,请记下来。

3.3 上传 GPG 公钥

将公钥上传到公共的密钥服务器,这样其他人才可以通过公钥来验证 jar 包的完整性。

gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys CAB4165C69B699D989D2A62BD74A11D3F9F41243(你的)

其中 CAB4165C69B699D989D2A62BD74A11D3F9F41243 为密钥的 ID,可以通过 gpg --list-keys 命令查看

gpg --list-keys

/Users/kiwenlau/.gnupg/pubring.kbx
----------------------------------
pub   dsa2048 2010-08-19 [SC] [expires: 2020-06-15]
      85E38F69046B44C1EC9FB07B76D78F0500D026C4
uid           [ unknown] GPGTools Team 
sub   elg2048 2010-08-19 [E] [expires: 2020-06-15]
sub   rsa4096 2014-04-08 [S] [expires: 2024-01-02]
pub   rsa2048 2019-01-03 [SC] [expires: 2021-01-02]
      CAB4165C69B699D989D2A62BD74A11D3F9F41243
uid           [ultimate] kiwenlau 
sub   rsa2048 2019-01-03 [E] [expires: 2021-01-02]

4. 配置 Maven 的 setting.xml

setting.xml 为 Maven 的全局配置文件,在 Mac 上的位置为/你的 maven 安装目录/conf/settings.xml,我们需要将第 1 步配置的 Username 和 Password 添加到标签中,这样我们才能将 jar 包部署到 Sonatype OSSRH 仓库:

<servers>
    <server>
       <id>ossrhid>
       <username>leojieusername>
       <password>passswordpassword>
     server>
servers>

5. 配置项目的 pom.xml

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,根据需要修改即可。

<?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.0modelVersion>

    <groupId>com.github.CCweixiaogroupId>
    <artifactId>hbase-sdkartifactId>
    <packaging>pompackaging>
    <version>1.0.0version>

    <name>hbase-sdkname>
    <url>https://github.com/CCweixiao/hbase-sdk.giturl>
    <description>hbase orm框架description>

    <licenses>
        
        <license>
            <name>MIT Licensename>
            <url>http://www.opensource.org/licenses/mit-license.phpurl>
        license>
    licenses>

    <scm>
        
        <url>https://github.com/CCweixiao/hbase-sdkurl>
        <connection>https://github.com/CCweixiao/hbase-sdk.gitconnection>
    scm>

    <developers>
        
        <developer>
            <id>leojieid>
            <name>leojiename>
            <url>https://www.jielongping.comurl>
            <email>leohjie1314@gmail.comemail>
            <roles>
                <role>Developerrole>
            roles>
            <organization>bigdataorganization>
            <timezone>+8timezone>
        developer>
    developers>

    <modules>
        
        <module>spring-boot-starter-hbasemodule>
        <module>hbase-sdk-coremodule>
        <module>spring-boot-starter-hbase-examplemodule>
    modules>

    <properties>
        <compiler.version>1.8compiler.version>
        <java.version>1.8java.version>
        <maven.compiler.source>1.8maven.compiler.source>
        <maven.compiler.target>1.8maven.compiler.target>
        

        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <spring-boot-2.version>2.1.7.RELEASEspring-boot-2.version>
        <hbase.version>1.4.3hbase.version>
        <gson.version>2.8.5gson.version>
        <junit.version>4.9junit.version>
    properties>

    <repositories>
        <repository>
            <id>aliyunid>
            <name>Nexus Release Repositoryname>
            <url>http://maven.aliyun.com/nexus/content/groups/publicurl>
            <releases>
                <enabled>trueenabled>
            releases>
            <snapshots>
                <enabled>trueenabled>
            snapshots>
        repository>
        <repository>
            <id>clouderaid>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/url>
        repository>
        <repository>
            <id>snapshotid>
            <name>Maven Snapshot Repositoryname>
            <url>https://repository.apache.org/snapshotsurl>
            <releases>
                <enabled>trueenabled>
            releases>
            <snapshots>
                <enabled>falseenabled>
            snapshots>
        repository>
        <repository>
            <id>wso2-maven2-repositoryid>
            <name>WSO2 Maven2 Repositoryname>
            <url>http://maven.wso2.org/nexus/content/repositories/releases/url>
        repository>
        <repository>
            <id>wso2.releasesid>
            <name>WSO2 internal Repositoryname>
            <url>http://maven.wso2.org/nexus/content/repositories/releases/url>
            <releases>
                <enabled>trueenabled>
                <updatePolicy>dailyupdatePolicy>
                <checksumPolicy>ignorechecksumPolicy>
            releases>
        repository>
    repositories>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.github.CCweixiaogroupId>
                <artifactId>hbase-sdk-coreartifactId>
                <version>${project.version}version>
            dependency>
            <dependency>
                <groupId>com.github.CCweixiaogroupId>
                <artifactId>spring-boot-starter-hbaseartifactId>
                <version>${project.version}version>
            dependency>
        dependencies>
    dependencyManagement>


    <profiles>
        <profile>
            <id>defaultid>
            <activation>
                <activeByDefault>trueactiveByDefault>
            activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.pluginsgroupId>
                        <artifactId>maven-source-pluginartifactId>
                        <version>2.2.1version>
                        <executions>
                            <execution>
                                <phase>packagephase>
                                <goals>
                                    <goal>jar-no-forkgoal>
                                goals>
                            execution>
                        executions>
                    plugin>
                    <plugin>
                        <groupId>org.apache.maven.pluginsgroupId>
                        <artifactId>maven-javadoc-pluginartifactId>
                        <version>2.9.1version>
                        <executions>
                            <execution>
                                <phase>packagephase>
                                <goals>
                                    <goal>jargoal>
                                goals>
                            execution>
                        executions>
                    plugin>
                    <plugin>
                        <groupId>org.apache.maven.pluginsgroupId>
                        <artifactId>maven-gpg-pluginartifactId>
                        <version>1.6version>
                        <executions>
                            <execution>
                                <phase>verifyphase>
                                <goals>
                                    <goal>signgoal>
                                goals>
                            execution>
                        executions>
                    plugin>
                plugins>
            build>
            <distributionManagement>
                <snapshotRepository>
                    
                    <id>ossrhid>
                    <url>https://oss.sonatype.org/content/repositories/snapshots/url>
                snapshotRepository>
                <repository>
                    <id>ossrhid>
                    <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/url>
                repository>
            distributionManagement>
        profile>
    profiles>

    <build>
        <resources>
            <resource>
                <directory>src/main/resourcesdirectory>
            resource>
        resources>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-compiler-pluginartifactId>
                    
                    <version>3.5.1version>
                    <configuration>
                        <source>${java.version}source>
                        <target>${java.version}target>
                        <compilerVersion>${java.version}compilerVersion>
                        <encoding>${project.build.sourceEncoding}encoding>
                        <optimize>trueoptimize>
                        <maxmem>1024mmaxmem>
                        <fork>truefork>
                        <compilerArgs>
                            <arg>-Xlint:all,-serial,-patharg>
                        compilerArgs>
                    configuration>
                    <executions>
                        <execution>
                            <phase>compilephase>
                            <goals>
                                <goal>compilegoal>
                            goals>
                        execution>
                    executions>
                plugin>
            plugins>
        pluginManagement>
    build>


project>

6. 发布 jar 包

执行 mvn clean deploy 处理,即可将 jar 包发布到 Sonatype OSSRH 仓库。

mvn clean deploy -Dmaven.test.skip=true  -projects hbase-sdk-core,spring-boot-starter-hbase

我的项目hbase-sdk含有多个模块,仅需部署 hbase-sdk-core 和 spring-boot-starter-hbase ,因此使用-projects 选项来指定。

第一次执行 mvn clean deploy 命令时,需要输入 GPG 密钥的密码。

7. close 并 release

mvn clean deploy 命令执行成功,使用 JIRA 账号登陆:https://oss.sonatype.org/#stagingRepositories,就可以看到你所发布的jar包了:

不墙访问不了,为了演示,只能盗图了。

ab2920d3744ccff56da7e70f39fd3289.png
yanshi

选中对于的 repository 之后,点击箭头所指的 close,close 时会检查发布的构件是否符合要求。若符合要求,则 close 成功,成功之后点击箭头所指的 release,即可正式将 jar 包发布到 Sonatype OSSRH 仓库。

release 成功大概 2 个小时之后,该构件就会同步到Maven 中央仓库:

02aeedceeebce39fe184bbbf51467b43.png
maven

8. 参考链接

  • https://www.cnblogs.com/fundebug/p/how-to-deploy-jar-to-maven-central-repository.html
  • https://www.jianshu.com/p/923913d904fb

据说,关注我的人都找到了对象?

f83704744ece9ffa1fe5c5e4e1d1af50.png
一、登录到JIRA 许多JIRA实例都会根据 权限 限制某些用户或用户组查看问题以及对问题的操作。而有些 JIRA实例就允许匿名用户访问,就像http://www.jira.cn中文演示站点允许任何未注册用户体验JIRA。 当你还没有登录到JIRA时,会显示 登录 面板。 这时你可以: 1. 登录到JIRA: 要登录到JIRA, 输入你的 '用户名' 和 '密码' 然后点击 '登录' 按钮。 点击 '这台计算机上记住我的登录信息' 这个检查框可以防止从JIRA中自动注销。 然而, 你的会话不会保留, 例如 上一个搜索记录, 当前使用的项目等。 2. 重置密码: 要重置密码, 点击 '无法登录' 链接。 在弹出的'无法登录'对话框中选择 '我忘记了密码'。 在随后出现的'用户名'字段中输入你的用户名,JIRA 会将重置密码链接发送到你在JIRA中登记的邮箱。如果你忘记了邮件地址, 你只能联系JIRA系统管理员。 3. 注册: 如果你还没有JIRA账号, 并且JIRA允许公开注册, 你就可以通过点击'注册'链接创建自己的JIRA账号。 在弹出的注册页面输入你的详细用户信息,并点击'注册'按钮。 请注意由于JIRA管理员可以对JIRA进行定制,所以你看到的页面可能会与截图有差别。 二、了解JIRA页面布局 • 面板 是你登录JIRA后看到的第一个页面。 • 导航栏 (在页面顶部)出现在JIRA所有页面上。它包括让你使用JIRA功能的快速链接。 • 页面顶部导航栏下的白色区域, 可以根据你的具体需要,定制显示不同类型信息的'面板小工具'。 请注意你的JIRA页面可能和上面的截图不太一样, 这是由于JIRA管理员 定制 了公司logo和背景色彩等元素。 但是导航栏上的基本菜单是一样的。 三、使用快捷键 如果你更喜欢使用键盘,JIRA一些基本功能支持快捷键操作。 本页面的内容: • 快捷键 • 全局快捷键 • '查看问题' 和 '问题导航器' 快捷键 • 表单快捷键 • 辅助键 • 打开快捷键对话框 • 禁止与开启快捷键功能 四、创建问题 创建问题 要创建JIRA问题, 你必须拥有相关项目的 '创建' 权限。 如果你还没有这个权限,请联系JIRA系统管理员。 你也可以观看JIRA视频了解如何创建问题。 JIRA视频链接地址http://www.confluence.cn/pages/viewpage.action?pageId=5177526。 要创建一个新的 JIRA 问题: 1. 点击页面顶部的 '创建问题' 链接。 2. 会显示'选择项目和问题类型'弹出框。选择相关的 项目 和 问题类型, 然后点击 '创建' 按钮。 注意如果默认的项目或问题类型不会显示这个弹出框, 例如 o 只有一个项目, 并且这个项目只有一个问题类型。 o 如果你在浏览项目时点击 '创建问题'链接, 而且浏览的项目只有一个问题类型。 o 如果你在浏览项目时点击 '创建' 图标, 例如: 3. '输入问题详细信息' 页面会显示出来。输入问题主题并完成所有标有带星号的斜体字体的必填字段。 注意这个页面可能由于JIRA管理员的自定义设置而显示不同的字段。 4. 点击页面底部的 '创建'按钮。这个新提交的问题就创建成功,你可以在 '查看问题'页面查看所有你输入的问题详细内容。你可能会收到包括问题主要信息以及带有问题超级链接的通知邮件。 要查看所有你创建的还没有解决的问题列表, 跳转到你的 用户配置页面,并点击 '我报告 & 开放的'过滤器。 如果JIRA管理员进行了高级配置, 你还可以 通过邮件创建问题。 五、在面板上添加饼图 '饼图' 可以根据指定 项目 或 问题过滤器,返回的问题列表,并按照指定字段进行分类汇总生成统计图形。例如, 根据一个项目中,一个版本的所有未解决问题, '饼图'可以按照指定的字段进行分类汇总 (例如按照 经办人)。 先看看饼图的外观 出现在面板上的 '饼图' 类似于下面截图: 在面板上添加'饼图' 1. 在你自己的 面板页面,点击右上角的 '添加小工具'链接。 2. 在随后显示出的 '小工具目录'对话框中选择 '饼图' 小工具,并点击 '马上添加' 按钮。然后点击底部的 '完成' 按钮返回面板页面。 3. 饼图小工具已经出现在面板中,并等待你继续配置: 1. '项目或保存的过滤器' — 输入项目或过滤器的名称,或点击'高级搜索'链接搜索项目或已经保存的过滤器。 2. '统计类型' — 选择饼图按照哪个字段进行分组统计。 3. '刷新频率' — 选择这个小工具自动刷新数据的时间间隔 (从不 / 每15分钟 / 每30分钟 / 每1个小时 / 每2个小时)。 4. 点击 '保存' 按钮。 只需简单地拖拽小工具,就可以移动面板上小工具的位置。你也可以改变小工具的外观
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值