Gradle- 发布 jar 到中央仓库

本贴最后更新于 2367 天前,其中的信息可能已经时过境迁

用 Gradle 部署到 OSSRH - 介绍

就像 Gradle 可以 Central Repository 中的 jar 一样,它也可以配置为发布到 OSSRH,一样简单。

元数据和签名

为了使用 Gradle 将您的组件部署到 OSSRH,您必须满足 pom.xml 中所有的东西,并提供所需的已签名组件。

MavenGradle 的插件可以处理元数据,生成所需的 pom.xml 文件,并负责将构建输出部署到存储库。signing 插件允许您获取由标准 Gradle 任务创建的组件,并签名:


apply plugin: 'maven'

apply plugin: 'signing' 

Jar 文件

对于典型的 Java 项目,您可以添加 javadocJar 以及 sourcesJar 任务

task javadocJar(type: Jar) {
    classifier = 'javadoc'
    from javadoc
}
task sourcesJar(type: Jar) {
    classifier = 'sources'
    from sourceSets.main.allSource
} 

并将它们与项目 jar 本身一起挂接到 artifacts 集合中:

artifacts {
    archives javadocJar, sourcesJar
} 

签署文物

已定义的工件可以使用签名

signing {
    sign configurations.archives
} 

元数据定义和上传

为了准备实际上传,您必须在 maven 插件的帮助下定义所有元数据。组和版本在顶层项目中设置,而 artifactId 为 archiveTask 配置。

group = "com.example.applications"
archivesBaseName = "example-application"
version = "1.4.7" 

生成的 pom 文件必须进行签名,然后必须上传所有已签名的工件。所有这些都可以配置为配置的一部分 uploadArchives

uploadArchives {
  repositories {
    mavenDeployer {
      beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
      repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
        authentication(userName: ossrhUsername, password: ossrhPassword)
      }
      snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
        authentication(userName: ossrhUsername, password: ossrhPassword)
      }
      pom.project {
        name 'Example Application'
        packaging 'jar'
        // optionally artifactId can be defined here 
        description 'A application used as an example on how to set up 
          pushing  its components to the Central Repository.'
        url 'http://www.example.com/example-application'
        scm {
          connection 'scm:svn:http://foo.googlecode.com/svn/trunk/'
          developerConnection 'scm:svn:https://foo.googlecode.com/svn/trunk/'
          url 'http://foo.googlecode.com/svn/trunk/'
        }
        licenses {
          license {
            name 'The Apache License, Version 2.0'
            url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
          }
        }
        developers {
          developer {
            id 'manfred'
            name 'Manfred Moser'
            email 'manfred@sonatype.com'
          }
        }
      }
    }
  }
} 

您的项目的依赖项将被插入到生成的项目中。

证书

用于签名和上传的凭证可以存储在 gradle.properties 用户主目录中的文件中。内容将如下所示

signing.keyId=YourKeyId
signing.password=YourPublicKeyPassword
signing.secretKeyRingFile=PathToYourKeyRingFile
ossrhUsername=your-jira-id
ossrhPassword=your-jira-password 

部署

有了这个配置,就可以开始部署

gradle uploadArchives

将部署发布到中央存储库

部署完成后,您可以继续手动发布组件。

链接

  • Gradle
    41 引用 • 20 回帖 • 2 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • 中央仓库
    2 引用 • 18 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 好的,多谢

  • 其他回帖
  • 像 Gradle、maven 上传中央仓库有内容限制吗?比如我自己的工具类封装了,可能对别人来说没用,我又不想搭建私服,他会对上传对内容进行审核吗?还是只要没 bug ,正常对 jar 都可以?

    1 回复
  • xjtushilei

    正常的就可以。没什么限制。编译通过就行。如果有注释的话,注释格式不能有问题,不然 maven-doc 本地编译过不去。没注释的话就没问题,233333.

    还有一个认证问题,推荐用 github,证明 group 的权限你有。

    之前我有一篇 https://hacpai.com/article/1492069833312 我上传了 https://github.com/xjtushilei/ScriptSpider , maven 比较麻烦,gradle 我没试过。

    1 回复