阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Gradle部署jar包到Maven中央库

448次阅读
没有评论

共计 4233 个字符,预计需要花费 11 分钟才能阅读完成。

Maven 作为目前 Java 界最好的 Dependency 管理系统,把 jar 包托管到 Maven 中央库,然后通过 Maven Dependency 使用是目前业界各种第三方库的普遍做法,如果,你想把自己开发的一些库分享给别人使用,也可以遵循这样的套路。Gradle 可以看做是升级版的 Maven,其使用了 Maven 最优秀的 Dependency 管理系统,但是,又规避了 Maven 的 build pipeline 的刻板和 xml 格式配置文件等缺点,可以说是目前 Java 界最好的构建工具。下面就来说说,如何使用 Gradle 把自己开发的 jar 包部署到 Maven 中央库中。

Part 1: 为自己的项目注册 Maven 中央库账号

在 http://oss.sonatype.orgz 注册账号,(注:Sonatype 是 Maven 中央库的管理系统),注册之后获得用户名,密码。后面的 build 脚本会用得上。

在 Sonatype 的 JIRA 系统中,创建一个 issue(选择 Project: Community Support – Open Source Project Repository Hosting; Issue Type: New Project),告诉 Sonatype 管理员,你想托管一个项目到 Sonatype 上。注意该 Issue 创建完之后,只有管理员有更改权限,因此,小心不要写错信息

创建完之后,需要等待 Sonatype 管理员审核,一般不超过 2 个工作日,一旦审核通过,会在该 Issue 上标明 Resolved,这就是说中央库已经准备好,可以随时上传自己的文件了。

Part 2: Maven 中央库托管规范

为了构建更加良好的 Maven 生态环境,Maven 对于托管到其上的库有非常明确的质量要求:* 项目的 Pom 文件必须包含如下元素:* 如果部署的是 jar 包且 jar 包里面有 java classes,那么除了 jar 包外,还必须上传该 jar 包的源代码包,javadoc 包,即必须部署三个包.jar/-sources.jar/ **-javadoc.jar。* 所有要部署的包都必须使用 GPG 签名,签名证书的 Public Key 必须上传到 hkp://pool.sks-keyservers.net/ 服务器上。More Info Maven Central Requirementhttps://docs.sonatype.org/display/Repository/Central+Sync+Requirements

Part 3: GPG 签名

前面提到,所有要上传到 Maven 中央库的文件都需要做签名,首先,需要下载 GPG 工具(https://gpgtools.org/)。Mac 用户可以直接下载带 UI 的工具 GPGTools Installer https://s3.amazonaws.com/gpgtools/GPGTools-20130330.dmg, 安装完之后,直接生成新的证书,然后 Send Public Key to Key Server 就行了。非常简单。如果你是命令行控,请参考 Gennerate GPG signature With Maven https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven

使用 Gradle 部署 jar 包到 Maven 中央库

Part 4: Gradle 脚本

apply plugin: ‘idea’
apply plugin: ‘java’
apply plugin: ‘maven’
apply plugin: ‘signing’ // 使用 signing plugin 做数字签名

// 定义 GroupID 和 Version,ArtefactID 会自动使用 Project 名
group = ‘com.thoughtworks.toggle’
version = ‘0.1.0-SNAPSHOT’
sourceCompatibility = 1.6
targetCompatibility = 1.6

repositories {
    mavenCentral();
}

dependencies {
    compile(
            ‘junit:junit:4.11’,
    )
}

uploadArchives {
    repositories {
        mavenDeployer {
            // 为 Pom 文件做数字签名
            beforeDeployment {MavenDeployment deployment -> signing.signPom(deployment) }

            // 指定项目部署到的中央库地址,UserName 和 Password 就是 Part 1 中注册的账号。
            repository(url: “https://oss.sonatype.org/content/repositories/snapshots/”) {
                authentication(userName: sonatypeUsername, password: sonatypePassword)
            }
            // 构造项目的 Pom 文件,参见 Part 2 中 Pom 文件的规范,不要遗漏必填项
            pom.project {
                name project.name
                packaging ‘jar’
                description ‘Toggle is a little java tool to make your life easier when you try to use Feature Toggle in Java.’
                url ‘https://github.com/xianlinbox/Toggle’

                scm {
                    url ‘scm:git@github.com:xianlinbox/Toggle.git’
                    connection ‘scm:git@github.com:xianlinbox/Toggle.git’
                    developerConnection ‘git@github.com:xianlinbox/Toggle.git’
                }

                licenses {
                    license {
                        name ‘The Apache Software License, Version 2.0’
                        url ‘http://www.apache.org/licenses/LICENSE-2.0.txt’
                        distribution ‘repo’
                    }
                }

                developers {
                    developer {
                        id ‘xianlinbox’
                        name ‘Liu Xiannings’
                    }
                }
            }
        }
    }
}

// 参见 Part 2,为项目生成 **.jar/**-javadoc.jar/**-sources.jar
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = ‘javadoc’
    from ‘build/docs/javadoc’
}

task sourcesJar(type: Jar) {
    classifier = ‘sources’
    from sourceSets.main.allSource
}

artifacts {
    archives jar
    archives javadocJar
    archives sourcesJar
}

// 为所有的 jar 包做数字签名
signing {
    sign configurations.archives
}

Part 5: 遇到过的问题

1. java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
这个问题只有在使用的是 OpenJDK 的时候才会遇到,原因是 OpenJDK 的包里面没有带有效的证书,在 MacOS 上,只要把系统库里带的 cacerts 给它关联过去就行了。

cd $(/usr/libexec/java_home -v 1.7)/jre/lib/security
ln -fsh /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts

2.Return Code is 400

这个问题有一段心酸的过程,有兴趣的可以看一下这个 issue :issue fixed process 在部署过程中收到这个 Error Message 的情况有 2 种:* 重复部署同一个 jar 包到 Maven 库,但是,Maven 库却设置为不允许重复部署,在 Gradle 1.0 版本的 MavenDeployer 就有这个问题,会重复提交 jar 包,不过已经在 1.1 版本修复。* 试图部署一个 release 版本的 jar 包到 snapshot 库。我的情况是后者,不过 Root Cause 比较汗颜,因为我把 version number 写成了“0.1.0-snapshot”, 不符合 Maven 对 Snapshot 包的规范,因此,被当做 release 版本了,修改为“0.1.0-SNAPSHOT”就成功了

Maven 权威指南_中文完整版清晰 PDF  http://www.linuxidc.com/Linux/2014-06/103690.htm

Maven 3.1.0 发布,项目构建工具 http://www.linuxidc.com/Linux/2013-07/87403.htm

Linux 安装 Maven http://www.linuxidc.com/Linux/2013-05/84489.htm

Maven3.0 配置和简单使用 http://www.linuxidc.com/Linux/2013-04/82939.htm

Ubuntu 下搭建 sun-jdk 和 Maven2 http://www.linuxidc.com/Linux/2012-12/76531.htm

Maven 使用入门 http://www.linuxidc.com/Linux/2012-11/74354.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计4233字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7987164
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...