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

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 Requirement
https://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

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:[email protected]:xianlinbox/Toggle.git‘
                    connection ‘scm:[email protected]:xianlinbox/Toggle.git‘
                    developerConnection ‘[email protected]: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”就成功了

时间: 2024-12-15 01:44:50

使用Gradle部署jar包到Maven中央库的相关文章

【Eclipse】 Maven和Gradle区别及使用Eclipse中使用Gradle下载Jar包

一.简介 代码三大构建工具,Ant.Maven和Gradle.现在的状况是Maven和Gradle并存,Gradle使用的越来越广泛. 二.Maven和Gradle区别 Maven的主要功能是多模块构建.依赖管理系统.一致的项目结构.一致的项目构建模型和插件机制.主要体现以下5点 多模块构建 现在的项目中,一般我们会将一个项目分解是多个模块.在Maven中需要定义一个parent POM作为一组module的通用配置,我们可以用<modules>标签来定义一组子模块 在Gradle也支持多模块

本地jar包在maven工程中pom引用

背景 ??在使用Maven的过程中,经常碰到有些jar包在中央仓库没有的情况.如果公司有私服,那么就把jar包安装到私服上.如果没有私服,那就把jar包安装到本地Maven仓库.下面是如何把jar包导入本地maven仓库. 解决方法 1.确定包信息 groupId:设置项目代码的包名(一般用公司或组织名) artifactId:设置项目名或模块名 version:版本号 packaging:什么类型的文件(jar包) filePath:指定jar文件路径与文件名(同目录只需文件名) 2.在工程根

maven添加本地jar包到maven仓库

maven添加本地jar包到maven仓库mvn install:install-file -DgroupId=io.netty -DartifactId=netty-all -Dversion=5.0.0.Alpha1 -Dpackaging=jar -Dfile=G:/java/jar包/netty-all-5.0.0.Alpha1.jar 我下载的这个 jar 包是放到了 D:\mvn 目录下(D:\mvn\spring-context-support-3.1.0.RELEASE.jar)

android studio 使用gradle 导出jar包,并打包assets目录

最近项目在做一个sdk,供别的开发者使用,所以要求导出jar包. 与eclipse不同,android studio 1.0 没提供导出jar包的图形界面.需要结合gradle来生成jar包. 首先 需要设置module应用的gradle插件为 library 代码长这样: ? 1 <code class="hljs">apply plugin: 'com.android.library'</code> 这样,build的时候,android studio 1.

如何上传jar包至Maven私服

如何上传jar包至Maven私服 1.通过浏览器进入,点击右上角的. 2.在弹出的登录窗口中输入用户名和密码. 3.登录成功之后,点击左侧列表中的Views/Respsitories-->Respsitories. 4.在打开的标签页中,选择3rd party,我们自己的jar包都要上传到3rdparty中.在下方的窗片中,可以浏览到所有的第三方的jar包. 5.点击下方窗片的,准备上传我们自己的包. GAV Definition 选择:GAVParameters. 依次填写Group.Arti

手动添加jar包到maven仓库

引言: 虽然配置了maven以后可以通过索引的方式自动下载jar包到本地maven仓库,从而使项目中直接使用本地仓库里面的架包, 但是这一招并不是每一次都灵应,也有遇到了失败的时候,当遇到失败的时候,我们可以通过使用命令的形式将架包导入 本地的maven仓库,然后项目中就可以直接使用了.eg: 我在使用druid时无法从阿里的仓库中直接获取到druid-1.0.27-sources.jar. druid-1.0.27-javadoc.jar,只能从国际仓库中获取了以后在导入到本地仓库. 1. m

centos7后台服务部署jar包

centos7 服务部署jar包 centos7 服务介绍 CentOS7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分, 每一个服务以.service结尾,一般会分为3部分:[Unit].[Service]和[Install],具体内容如下: [Unit] Description=xiyoulibapi After=network.target remote-fs.target nss-lookup.target [Serv

部署Jar包到远程Maven仓库

在使用maven开发工程时,模块A可能会依赖模块B的jar包,如果两个模块都是在一个工程里,只需要在模块A的pom文件中加入模块B的依赖信息,模块A就可以加载模块B的jar包.但如果模块A与模块B在不同的工程,甚至是由不同的工程师开发,这时候就需要将模块B部署到远程仓库,模块A就可以在pom文件中通过配置远程仓库的地址来下载模块B的jar包了. 通常允许上传的远程仓库有两种:Snapshots和Releases,分别为快照版仓库和稳定版仓库.快照版仓库用于存放不稳定的开发包,稳定版仓库用于存放稳

2017/1/7 学习笔记 jar包,maven

① 关于tar,jar,war文件 tar是通用的另一种打包格式,为了部署到服务器时方便. jar是java app server识别的java部署格式,其实是Zip文件,只是内部的文件有规范. war是专用于web app的jar.另外还有用于enterprise app的ear后缀. ② 什么是maven? Maven是一个用于项目构建的工具,通过它便捷的管理项目的生命周期.即项目的jar包依赖,开发,测试,发布打包. 使用maven不需要上网单独下载jar包,只需要在配置文件pom.xml