`

使用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 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



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”就成功了
  • 大小: 143.5 KB
1
0
分享到:
评论
1 楼 pengisgood 2013-04-28  
看你写的博客,我学到了很多东西啊!

相关推荐

    Spring-Boot-Reference.pdf

    •构建系统:Maven | Gradle |和|初学者 •最佳实践:代码结构| @Configuration | @EnableAutoConfiguration | Beans和依赖注入 •运行代码: IDE |打包| Maven | Gradle •包装应用程序: 生产jar •Spring Boot CLI: ...

    springboot参考指南

    使用"default"包 ii. 14.2. 定位main应用类 iii. 15. 配置类 目錄 Spring Boot参考指南 2 i. 15.1. 导入其他配置类 ii. 15.2. 导入XML配置 iv. 16. 自动配置 i. 16.1. 逐步替换自动配置 ii. 16.2. 禁用特定的自动...

    javabiginteger源码-java-conflux-sdk:ConfluxJavaSDK

    我们已经发布这个包到maven中央仓库方便导入,你可以导入 阿帕奇Maven: < dependency > < groupId >io.github.conflux-chain</ groupId > < artifactId >conflux.web3j</ artifactId > < version...

    endpoints-framework-gradle-plugin

    或者,您可以从GitHub下载它并将其部署到本地存储库。 以下代码段显示了有关如何从Maven Central检索它的示例: buildscript { repositories { mavenCentral() } dependencies { classpath ' ...

    neo4j:春天的dataneo4j

    java -jar build/libs/*.jar 如果您使用的是 Maven,则可以使用 mvn spring-boot:run 运行该应用程序。 或者您可以使用 mvn clean package 构建 JAR 文件并通过键入以下内容运行 JAR: java -jar target/*.jar

    canadensys-web-core:与Web应用程序相关的核心功能

    canadensys-web-core:jar库 canadensys-webapp-core:构建为war文件的webapp文件夹 在Maven Central上可用。 代码状态 Freemaker范本 包括实用程序功能,Google Analytics(分析)支持和分页支持。 用法 库“ ...

    basis-arguments:命令行解析库

    部署到Maven Central。 零依赖性。 设置 作为您的Maven项目的依赖项: <groupId>io.marioslab.basis <artifactId>arguments <version>1.3 作为您的Gradle项目的依赖项: compile 'io.marioslab.basis:...

    java财务管理系统源码-nrjavaserial:Java串行端口系统。这是RXTX项目的一个分支,用于原生代码的jar加载

    Gradle 支持 JAR 创建。 删除部分实现的 RXTX 代码以简化仅用于串行端口访问的库。 用于针对源测试应用程序代码的完整 Eclipse 集成。 通过合并 . Linux 的 RS485 支持 和一堆错误修复 修复了调用serial.close()时...

    openshift-cartridge-springboot:用于 Spring Boot 应用程序的 OpenShift Cartridge 部署为胖 jar。 可扩展

    Spring Boot 的微服务模板Gradle 或 Maven 可扩展(因此是自定义墨盒,而不是 diy)墨盒开发部署自定义盒式磁带后,您必须手动清除代理缓存以允许在不更改版本的情况下进行检索。 /usr/sbin/oo-admin-broker-cache -...

    Spring Boot中文文档.rar

    spring boot中文文档,从安装到部署。 I. Spring Boot文件 1.关于文档 2.获得帮助 3.第一步 4.使用Spring Boot 5.了解Spring Boot功能 6.转向生产 7.高级主题 II。入门 8.介绍Spring Boot ...

    volunteer-portal:DigiVol(生物多样性志愿者门户)

    这将从ALA Maven存储库中部署预编译的版本。 注意:必须先安装“ 和“ 。 然后设置虚拟机并运行剧本: git clone https://github.com/AtlasOfLivingAustralia/ala-install.git cd ala-install/v

    hazelcast-docker-swarm-discovery-spi:针对启用了Hazelcast的应用程序的基于Docker Swarm的发现策略SPI

    hazelcast-docker-swarm-discovery-spi 为启用了Hazlecast 3.6+的应用程序提供基于Docker Swarm模式的... 更新您的gradle / maven依赖项以使用Maven Central: https ://search.maven.org/search?q=g:org.bitsofinfo

    java8看不到源码-java-bitxhub-client:java-bitxhub-客户端

    看不到源码Java Bitxhub 客户端 该 SDK 使 Java 开发人员能够构建与 BitXHub 交互的解决方案。 准备 您需要在您的机器上安装以下依赖项。 开始 安装 Maven <groupId>cn.dmlab</groupId> <artifactId>java-bitxhub-...

Global site tag (gtag.js) - Google Analytics