Sonatype Nexus在Maven Central Repository开户实践笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jinjinnsfz1991/article/details/80688775
【前言】

阅读本文,您将了解如何使用Sonatype Nexus在Maven Central Repository开通账户,并提交、管理您的开源AndroidLibrary

首先,介绍一下名次概念:

(1)Sonatype: 一款著名的maven仓库管理软件

(2)aar:Google为Android开发所设计的一种library格式,全名为Android Archive Library,与Java Jar Library不同的是,aar除了java code之外还包含资源文件,即xml文件、图片、文字等,jar逐渐被aar所取代。

(3)Maven Central Repository:即Maven中央仓库,全球多数优秀的SDK均会在此发布,Android Studio也默认提供了对它的依赖支持。

【一、准备工作】

1、注册Sonatype Nexus账号( https://issues.sonatype.org

2、下载并安装GPG签名工具(gpg4win下载地址

3、登陆Maven Central Repository(https://oss.sonatype.org/),账号与Sonatype Nexus共用

【二、实践步骤】

第一步:在Sonatype上创建一个Project Ticket(链接地址)


Tips:如何填表

-Project : 选择Community Support - Open Source Project Repository Hosting
-Issue:选择Type New Project-Summary:填写项目名称
-Description:填写描述
-Group Id:域名反转,如www.redapplenet.com域名则反转为com.redapplenet。规则见(http://central.sonatype.org/pages/choosing-your-coordinates.html
-Project URL:项目的git主页地址。如https://gitee.com/wuguojin/android_core_library
-SCM url:项目的git下载地址,如https://gitee.com/wuguojin/android_core_library.git

提交成功后,管理员会在评论里向你核实一些信息,如询问你是否拥有上述域名,需要在Comment中回复管理员,方可继续审核。待管理员审核后,状态会变为Resolved,则表示ticket创建成功。

第二步GPG工具生成密钥,并上报服务器。

使用cmd命令行,依次执行如下命令:

gpg --version 
(获取版本号)

gpg --gen-key 
(生成密钥)过程中,根据命令行提示输入真实姓名、邮箱、密码(要记住、后面会用到)

gpg --list-keys --keyid-format SHORT 
(列出所有密钥)

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys A6BAB25C
(提交密钥到服务器,其中A6BAB25C替换为上一步获取到的八位短ID)

打开Kleopatra,在列表中找到刚刚创建的密钥对,右键-导出绝密密钥,选择导出位置,输入任意文件名以.pgp后缀结尾,点击OK导出。备用

第三步:配置AS工程中gradle.properties

## signing plugin
signing.keyId=FDA493CF  ##提交给服务器的短ID
signing.password=Huicent    ##生成密钥时输的密码
signing.secretKeyRingFile=../huicent.pgp ##上一步导出的.pgp密钥文件相对路径

## sonatype mavneCentral account
sonatype_username=xxx    ##sonatype注册名
sonatype_pwd=xxx        ##sonatype密码

## maven configs
maven_repo_url=https://oss.sonatype.org/service/local/staging/deploy/maven2/   ##见[附]
maven_snapshot_url=https://oss.sonatype.org/content/repositories/snapshots/    ##见[附]
maven_group_id=com.redapplenet    ##第1步创建ticket时填写的Group Id

第四步:编写gradle Task UploadArchieve等

LibraryModule的build.gradle,代码如下

apply plugin: 'maven'
apply plugin: 'signing' //使用signing plugin做数字签名
String moduleName = "CoreLibrary"

...(省略)...

//依赖maven中心仓库
repositories {
    mavenCentral()
}
// 创建gpg签名验证任务
signing {
    sign configurations.archives
}
//通过from函数指定代码源,这里是默认代码源
task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs 
    classifier 'sources'
}
//创建source上传任务
artifacts {
    archives generateSourcesJar
}
//打包aar并提交mavenCentral
uploadArchives {
    repositories.mavenDeployer {
        beforeDeployment {
            MavenDeployment deployment -> signing.signPom(deployment)
        }
        repository(url: "${maven_repo_url}") {
            authentication(userName: "${sonatype_username}", password: "${sonatype_pwd}")
        }
        snapshotRepository(url: "${maven_snapshot_url}") {
            authentication(userName: "${sonatype_username}", password: "${sonatype_pwd}")
        }

        pom.project {
            name project.name
            packaging 'aar'
            groupId "${maven_group_id}"
            artifactId moduleName //模块名
            version '1.0.0-rc1' //aar版本号
            description 'AndroidCoreLib' //备注
            url 'https://gitee.com/wuguojin/android_core_library.git'

            scm {//Git项目地址
                url 'scm:git@gitee.com:wuguojin/android_core_library.git'
                connection 'scm:git@gitee.com:wuguojin/android_core_library.git'
                developerConnection 'git@gitee.com:wuguojin/android_core_library.git'
            }

            licenses {
                license {
                    name 'The Apache Software License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    distribution 'Huicent'
                }
            }
            developers {//开发者信息
                developer { 
                    id 'Huicent'
                    name 'Wu Guojin'
                    email 'wugj@redapplenet.com'
                }
            }
        }
    }
}

第五步:提交、发布aar

前提:第一步创建的project Ticket审核完成

(1)在Android Studio的Gradle面板找到uploadArchive指令,双击执行,等待console显示build successful,提交完成。

(2)登陆Snoatype Nexus,左侧栏点击Staging Repositories,在列表中找到刚刚提交仓库任务,选中点击Close,等待一段时间后(大约1分钟),刷新查看如果Close成功,则点击Release,即可完成发布。

    

(3)发布成功后约20分钟,一般可以引用成功当前版本了。
dependencies {
    ...[省略]...
    implementation 'com.redapplenet:HuicentCoreLibrary:1.0.4-rc3' //库sdk
    ...[省略]...
}
【附】MavenCentral地址
* Deploy snapshot artifacts into repository
https://oss.sonatype.org/content/repositories/snapshots

* Deploy release artifacts into the staging repository
https://oss.sonatype.org/service/local/staging/deploy/maven2

* Promote staged artifacts into repository 'Releases'
* Download snapshot and release artifacts from group
https://oss.sonatype.org/content/groups/public

* Download snapshot, release and staged artifacts from staging group
https://oss.sonatype.org/content/groups/staging



展开阅读全文

m2eclipse 无法更新central Repository

08-04

刚刚安装好了Eclipse 3.4, 添加上了m2eclipse-0.9.5和Subclipse。 可是在Maven Index视图下,无法更新central Repository. 启动后Maven Console就会有一句提示rn“Unable to update index for central http://repo1.maven.org/maven2/”。待开错误日志有如下的提示:rn----------------------------------------------------------------------------------------------------------------rnjava.io.IOException: Resource nexus-maven-repository-index.zip does not existrnat org.sonatype.nexus.index.updater.DefaultIndexUpdater.downloadResource(DefaultIndexUpdater.java:243)rnat org.sonatype.nexus.index.updater.DefaultIndexUpdater$1.invoke(DefaultIndexUpdater.java:87)rnat org.sonatype.nexus.index.updater.DefaultIndexUpdater.run(DefaultIndexUpdater.java:169)rnat org.sonatype.nexus.index.updater.DefaultIndexUpdater.fetchAndUpdateIndex(DefaultIndexUpdater.java:63)rnat org.maven.ide.eclipse.internal.index.NexusIndexManager.fetchAndUpdateIndex(NexusIndexManager.java:468)rnat org.maven.ide.eclipse.index.IndexManager$UpdateCommand.run(IndexManager.java:414)rnat org.maven.ide.eclipse.index.IndexManager$IndexUpdaterJob.run(IndexManager.java:531)rnat org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)rn-----------------------------------------------------------------------------------------------------------------rnSession Data:rneclipse.buildId=I20080617-2000rnjava.version=1.6.0_06rnjava.vendor=Sun Microsystems Inc.rnBootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=de_DErnCommand-line arguments: -os win32 -ws win32 -arch x86rnrn请教那位高人有经验解决这个问题!十分感谢!!rnrnrnrn[color=#000000]--------------------------------------------------------------------rn以下内容为自动编辑的内容,并非楼主的发贴内容,此仅用于显示而已,并无任何其他特殊作用rn楼主【serpent007】截止到2008-08-04 19:43:38的历史汇总数据(不包括此帖):rn发帖的总数量:0 发帖的总分数:0 每贴平均分数:0 rn回帖的总数量:0 得分贴总数量:0 回帖的得分率:0% rn结贴的总数量:0 结贴的总分数:0 rn无满意结贴数:0 无满意结贴分:0 rn未结的帖子数:0 未结的总分数:0 rn结贴的百分比:---------------------结分的百分比:---------------------rn无满意结贴率:---------------------无满意结分率:---------------------rn如何结贴请参考这里:[url=http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html][/url][/color]rn取消马甲机器人,请点这里:[url=http://www.java2000.net/mycsdn/robotStop.jsp?usern=serpent007][/url] 论坛

没有更多推荐了,返回首页