鸿蒙开源三方组件Maven&HAPM发布流程指导 原创 精华

鸿蒙开发者社区官方账号
发布于 2021-7-9 18:38
浏览
7收藏

1 组件Maven发布

这里以发布到maven中心仓( https://s01.oss.sonatype.org/content/repositories/releases/ ) 为示例

1.1 前提条件:

Maven账号注册: 获取maven中心仓的用户名和密码以及生成groupid

1.2 maven 发布模板

对应修改library级别的build.gradle 文件的rootProject属性:

apply plugin: 'com.huawei.ohos.library'
apply from: '../upload.gradle' // 上传完Maven之后需要删除该行代码,否则工程编译会报错

rootProject.ext{
    DEFAULT_GROUP_ID = '按照实际的GROUP_ID为准' // 请以申请maven注册时的groupid为准,这个属性不用改
    DEFAULT_ARTIFACT_ID = '按照实际的ARTIFACT_ID为准' // 建议填写组件的仓名,单个lib库的就直接仓名,多个lib库的就以仓名+各lib后缀
    DEFAULT_VERSION = 'VERSION_ID'// 在 https://s01.oss.sonatype.org/#/welcome 上查找对应组件的版本号
}

ohos {
    compileSdkVersion 5
    defaultConfig {
        compatibleSdkVersion 5
    }
    
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testCompile'junit:junit:4.12'
}

工程根目录创建一个upload.gradle文件,内容模板如下:

apply plugin: 'maven'
apply plugin: 'maven-publish'

def REMOTE_MAVEN_REPOSITORY_URL='https://s01.oss.sonatype.org/content/repositories/releases/' //远程Maven中心仓地址,固定的不需要改动
def MAVEN_USERNAME='按照实际的账号输入' // 远程Maven中心仓的用户名,固定的不需要改动
def MAVEN_PASSWORD='按照实际的密码输入' // 远程Maven中心仓的密码,固定的不需要改动

afterEvaluate { project ->
    publishing {
        publications{
            mavenJava(MavenPublication){
                // 发布har包使用字段components.release,发布jar包使用components.java
                from components.release
                group=rootProject.ext.DEFAULT_GROUP_ID
                artifactId=rootProject.ext.DEFAULT_ARTIFACT_ID
                version=rootProject.ext.DEFAULT_VERSION
            }
        }
        repositories{
            maven{
                url=REMOTE_MAVEN_REPOSITORY_URL
                credentials{
                    username MAVEN_USERNAME
                    password MAVEN_PASSWORD
                }
            }
        }
    }

}

1.2 maven 发布步骤

  1. 在项目根目录粘贴upload.gradle 文件,这个脚本文件的内容基本是固定的。

    注意:区分上传的是har包还是jar包,需要对应修改upload.gradle文件中from 属性,发布har包使用字段components.release,发布jar包使用components.java

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

  1. 注意:upload.gradle文件包含敏感信息,不能上传到gitee代码仓库。打开项目根目录.gitignore文件,添加upload.gradle,防止upload.gradle文件不小心上传到gitee远程代码仓库。

  2. 进入准备发布版本的组件库module library目录,打开build.gradle文件,对应修改 DEFAULT_GROUP_ID(组件发布地址不变的话,就不用改)、DEFAULT_ARTIFACT_ID(项目名称)、DEFAULT_VERSION(组件Maven版本号)参数。

  3. 打开项目根目录下的README.md文件,修改集成指引
    鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

  4. 双击执行publishing 任务下的publish进行版本发布,底部build、run选项窗口无报错信息则说明版本已经发布成功

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

  1. 验证:进入Nuxes仓库管理平台查看已发布的版本,Nuxex管理平台链接https://s01.oss.sonatype.org/,打开 release仓库查看自己发布的版本,不登录也能查看。

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

  1. maven发布完成后,可以在gitee项目中添加一个tag标签(可选操作)。

    Tag标签命名和发布到maven中心仓库的版本号对应。目前我们项目只有master分支,所以只需要在master添加tag标签即可,后期有其他分支再根据业务需求进行调整。

    打开gitee官网https://gitee.com,进入项目新建一个tag标签,如下图:

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区
鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区
鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

2 组件HAPM发布

2.1:前提条件:

配置HPM

1、node.js安装

进入nodejs官网https://nodejs.org/en/download/,下载安装node.js,已经安装node.js请跳过此步骤。(注意不要更改默认安装路径)

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

安装完成之后,使用执行cmd命令查看node版本号:node -v
鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

2、hpm 安装

  1. 执行命令安装hpm,安装命令 npm install –g @ohos/hpm-cli

    注意:如果提示代理问题造成的安装失败,可以到C:\Users\xxxx找到.npmrc文件,把该文件删除,再尝试安装

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

  1. 执行命令查看hpm版本

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

  1. 配置密钥(用了别人账号的,只要是不同的电脑,就要重新配置)
    • 在登陆时如果遇到如下错误,只需配置登录页面中登录按钮左侧的站点为“中国”即可。
      鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区
    • 进入https://hpm.harmonyos.com/hapm/#/cn/home,进入个人中心,查看邀请码

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

  • 在cmd命令行窗口执行以下命令配置用户信息:

    hpm config set loginUser 邀请码

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

  • 在cmd命令行窗口执行以下命令生成密钥:hpm gen-keys

    成功后会在C:\Users\xxxx.hpm\key下生成两个文件

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

2.1 HAPM介绍和准备工作:

HAPM介绍: https://hpm.harmonyos.com/hapm/#/cn/help/introduction

准备工作: https://hpm.harmonyos.com/hapm/#/cn/help/preparation

2.2 HAPM发布模板

对应修改library级别的build.gradle 文件的rootProject属性,内容如下:

apply plugin: 'com.huawei.ohos.library'
apply from: '../upload.gradle'

rootProject.ext {
    DEFAULT_GROUP_ID = '按照实际的GROUP_ID为准' // 请以申请maven注册时的groupid为准,这个属性不用改
    DEFAULT_ARTIFACT_ID = '按照实际的ARTIFACT_ID为准' // 建议填写组件的仓名,单个lib库的就直接仓名,多个lib库的就以仓名+各lib后缀
    DEFAULT_VERSION = 'VERSION_ID'// 在 https://s01.oss.sonatype.org/#/welcome 上查找对应组件的版本号
    LIB_HOME_URL = '' // 组件官网网站主页,没有就留空
    LICENSE_NAME = 'The Apache License, Version 2.0' // License名称,以实际为准
    LICENSE_URL = 'https://gitee.com/openharmony-tpc/Highlight/blob/master/LICENSE' // gitee上对应组件的license地址,以实际为准
    HPM_DESCRIPTION = 'A library with high directivity for hap.' // 组件描述(注意编码格式,确保没有乱码),以实际为准
    HPM_TAG = 'UI'  // 分类,多个分类以逗号分隔。这样配置发布HAPM成功后,在HAPM上该组件会被归类到UI分组;固定列表中选择
    HPM_KEYWORDS = 'Highlight' // 关键字,多个关键字以逗号分隔。HAPM上搜索这里配置的关键字可以查找到对应组件,以实际为准
    HPM_DIRS = '{"lib":["build/outputs/*ar/release/*.*ar"]}' //将build/outputs/*ar/release/下的所有*ar文件打包到lib目录下,jar包路径可能为build/libs/*.*ar,以实际位置为准
}

ohos {
    compileSdkVersion 5
    defaultConfig {
        compatibleSdkVersion 5
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
}

工程根目录upload.gradle文件中增加发布HAPM的task模板,内容如下:

apply plugin: 'maven'
apply plugin: 'maven-publish'

task publish2hpm {
    doLast {
        pom {
            project {
                version = rootProject.ext.DEFAULT_VERSION // 要发布组件的版本号
                groupId = rootProject.ext.DEFAULT_GROUP_ID // GroupID
                artifactId = rootProject.ext.DEFAULT_ARTIFACT_ID // 项目名称,单库的就直接项目名,多库的就项目名+后缀
                description(rootProject.ext.HPM_DESCRIPTION) // 组件描述
                url rootProject.ext.LIB_HOME_URL // 组件主页地址
                licenses {
                    license {
                        // license的配置请以当前库的实际license为准,url也请使用gitee上对应组件的license,如果原库根目录下没有LICENSE文件,只有README中有,就自己在根目录下新建一个LICENSE文件,内容复制README中的内容。
                        // 例如:https://gitee.com/openharmony-tpc/Highlight/blob/master/LICENSE
                        name = rootProject.ext.LICENSE_NAME
                        url = rootProject.ext.LICENSE_URL
                    }
                }
                scm {
                    // 组件gitee仓库地址,这里也要换成自己的gitee仓库地址,此处仅以华为的为例进行说明,请以自己公司或者个人的为准
                    connection = "scm:git:https://gitee.com/openharmony-tpc/" + rootProject.ext.DEFAULT_ARTIFACT_ID + ".git"
                    url = 'https://gitee.com/openharmony-tpc/' + rootProject.ext.DEFAULT_ARTIFACT_ID
                }
                properties = [
                        // @opensource是hapm上的发布者名称,DEFAULT_ARTIFACT_ID'为项目名
                        'hpm.bundle.name'    : '@opensource/' + rootProject.ext.DEFAULT_ARTIFACT_ID,
                        'hpm.bundle.tags'    : rootProject.ext.HPM_TAG,// tags需要填写一定范围内的词语,只能填一个
                        'hpm.bundle.keywords': rootProject.ext.HPM_KEYWORDS,
                        'hpm.bundle.dirs'    : rootProject.ext.HPM_DIRS
                ]
            }
        }.writeTo("pom4hpm.xml")
        def proc
        if (System.properties['os.name'].contains('Windows')) {
            proc = 'hpm.cmd x2h gradle'.execute()
        } else {
            proc = 'hpm x2h gradle'.execute()
        }
        proc.waitForProcessOutput(System.out, System.err)
        def pom4hpm = file("./pom4hpm.xml")
//        delete pom4hpm
    }
}

2.2 hapm发布步骤

  1. 在项目根目录粘贴upload.gradle 文件,这个脚本文件的内容基本是固定的,除个别需求,不需要修改。

    注意:多库组件发布时,需注释掉已经上传完毕的build.gradle文件中的hapm相关配置信息,否则可能会导致后上传的库信息被覆盖。

  2. 注意:upload.gradle文件包含敏感信息,不能上传到gitee代码仓库。打开项目根目录.gitignore文件,添加下面内容,防止upload.gradle文件不小心上传到gitee远程代码仓库。

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

  1. 生成Release版本的har,要上传hapm模块下,执行packageReleaseHar,修改生成har名字为对应版本。

    鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

    (可选:修改har包名称)生成的har包用于配置upload中 hpm.bundle.dirs属性,dirs里配置我们希望打包并发布到HAPM的文件,其中lib名字可以自定义,lib的值为har文件路径。我们发布的jar/har包文件名称,应该这样定义:库名称-版本号.jar/库名称-版本号.har,这样就和发布maven中心仓的jar/har对应了。

    鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

  2. 进入准备发布版本的组件库module目录,打开build.gradle文件,对应修改 DEFAULT_GROUP_ID(组件发布地址不变,不用改)、DEFAULT_ARTIFACT_ID(单库的就直接项目名,多库的就项目名+后缀)、DEFAULT_VERSION(hapm组件版本号)、LIB_HOME_URL(组件官网地址_主页)、LICENSE_NAME(License名称)、LICENSE_URL(组件的License文件地址)、HPM_DESCRIPTION(组件描述)、HPM_TAG(组件分类)、HPM_KEYWORDS(组件搜索关键字)、HPM_DIRS(组件生成的har包路径,不用修改)参数。

    组件分类参照:

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

  1. 粘贴README.md文件、 LICENSE文件及CHANGELOG.md(选加)文件到lib模块根目录,不要添加进git版本管理。

    如果一个组件他的license申明只写在了readme的末尾,工程根目录下没有单独的LICENSE文件,那么我们在发布hapm的时候,应该在工程根目录新建一个LICENSE文件,复制readme中的内容,并且提交到gitee, 最后再发布hapm

    为保证HAMP上也能正常显示gif动图,请修改readme中的图片链接为gitee图片的在线绝对路径链接。例:

    https://gitee.com/openharmony-tpc/PagerBottomTabStrip/blob/master/img/Custom1.gif 其中blob节点改成raw。

    由于gitee上图片显示限制1M,超出1M的图片在HAPM系统上无法显示图片,可以自行把图片发布到到其他网站托管,引用其在线链接即可。

  2. (可选: hpm-cli 版本为1.3.0,不必执行此步骤)使用cmd 打开控制台,更新 hpm-cli 版本到 1.3.0,(更新命令:npm update -g @ohos/hpm-cli),如已更新,不必执行此步骤。

    验证hpm-cli版本的命令 hpm --version

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

更新 hpm-cli,命令 npm update -g @ohos/hpm-cli,如果执行命令之后开始执行更新,请等待

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

  1. (可选:如已确定jar/har已打包成功,可不执行此步骤)确保发布包内容正确验证:upload.gradle中命令行中添加 -p ,在命令中添加 -p 的意思是只打包不发布。

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

修改完成后保存,双击publish2hpm,然后会生成一个包含发布信息的tgz压缩包,如下图

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

将组件生成的tgz压缩包,粘到外面的文件夹,解压。

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

检查bundle.json内容是否正确,是否包含dirs属性,各字段以实际为准。
鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

如果包含,删除 upload.gradle中的 -p,准备正式发布。

  1. 使用gradle 快捷命令 publish2hapm进行发布,执行成功即可。

  2. 验证,发布成功(有审核期,审核通过后)后,进入HAPM平台,下载发布成功的版本,解压查看是否包含我们希望打包发布的文件,如下图所示

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

鸿蒙开源三方组件Maven&HAPM发布流程指导-鸿蒙开发者社区

附录: IDE 官方下载地址

IDE官方下载地址:https://developer.harmonyos.com/cn/develop/deveco-studio

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2021-7-20 17:51:53修改
7
收藏 7
回复
举报
10条回复
按时间正序
/
按时间倒序
Whyalone
Whyalone

终于可以搞事情了

回复
2021-7-10 22:29:50
BLUESKYHOST
BLUESKYHOST

真好 我终于发布了半个月了啊啊啊

回复
2021-7-12 08:11:50
RyanZhoo
RyanZhoo

npm安装hpm应该是:

npm install -g @ohos/hpm-cli

而非npm install –g @hpm/hpm-cli

回复
2021-7-12 11:20:43
BLUESKYHOST
BLUESKYHOST

组件HAPM发布 不支持个人开发者

回复
2021-7-12 11:45:55
Whyalone
Whyalone 回复了 BLUESKYHOST
组件HAPM发布 不支持个人开发者

不支持个人,那这个........有点打击士气啊

回复
2021-7-12 13:50:46
chaoxiaoshu
chaoxiaoshu

请问Maven发布直接就能通过吗

不需要经过审核吗

回复
2021-7-12 13:54:47
RyanZhoo
RyanZhoo 回复了 chaoxiaoshu
请问Maven发布直接就能通过吗 不需要经过审核吗

不需要审核

回复
2021-7-12 15:15:42
BLUESKYHOST
BLUESKYHOST 回复了 Whyalone
不支持个人,那这个........有点打击士气啊

哈哈 hapm 看看就好目前

回复
2021-7-12 15:41:17
我来抓人啦
我来抓人啦 回复了 chaoxiaoshu
请问Maven发布直接就能通过吗 不需要经过审核吗

maven中心仓发布后需要等待一会才会刷新显示。可以去Nuxex管理平台自行查看https://s01.oss.sonatype.org/

回复
2021-7-13 10:51:25
mb60efdbc02fd5c
mb60efdbc02fd5c

有人知道这个是什么原因吗?

回复
2021-7-15 14:56:37
回复
    相关推荐