鸿蒙开源三方组件Maven&HAPM发布流程指导 原创 精华
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 发布步骤
-
在项目根目录粘贴upload.gradle 文件,这个脚本文件的内容基本是固定的。
注意:区分上传的是har包还是jar包,需要对应修改upload.gradle文件中from 属性,发布har包使用字段components.release,发布jar包使用components.java
-
注意:upload.gradle文件包含敏感信息,不能上传到gitee代码仓库。打开项目根目录.gitignore文件,添加upload.gradle,防止upload.gradle文件不小心上传到gitee远程代码仓库。
-
进入准备发布版本的组件库module library目录,打开build.gradle文件,对应修改 DEFAULT_GROUP_ID(组件发布地址不变的话,就不用改)、DEFAULT_ARTIFACT_ID(项目名称)、DEFAULT_VERSION(组件Maven版本号)参数。
-
打开项目根目录下的README.md文件,修改集成指引
-
双击执行publishing 任务下的publish进行版本发布,底部build、run选项窗口无报错信息则说明版本已经发布成功
- 验证:进入Nuxes仓库管理平台查看已发布的版本,Nuxex管理平台链接https://s01.oss.sonatype.org/,打开 release仓库查看自己发布的版本,不登录也能查看。
-
maven发布完成后,可以在gitee项目中添加一个tag标签(可选操作)。
Tag标签命名和发布到maven中心仓库的版本号对应。目前我们项目只有master分支,所以只需要在master添加tag标签即可,后期有其他分支再根据业务需求进行调整。
打开gitee官网https://gitee.com,进入项目新建一个tag标签,如下图:
2 组件HAPM发布
2.1:前提条件:
配置HPM
1、node.js安装
进入nodejs官网https://nodejs.org/en/download/,下载安装node.js,已经安装node.js请跳过此步骤。(注意不要更改默认安装路径)
安装完成之后,使用执行cmd命令查看node版本号:node -v
2、hpm 安装
-
执行命令安装hpm,安装命令 npm install –g @ohos/hpm-cli
注意:如果提示代理问题造成的安装失败,可以到C:\Users\xxxx找到.npmrc文件,把该文件删除,再尝试安装
- 执行命令查看hpm版本
- 配置密钥(用了别人账号的,只要是不同的电脑,就要重新配置)
- 在登陆时如果遇到如下错误,只需配置登录页面中登录按钮左侧的站点为“中国”即可。
- 进入https://hpm.harmonyos.com/hapm/#/cn/home,进入个人中心,查看邀请码
- 在登陆时如果遇到如下错误,只需配置登录页面中登录按钮左侧的站点为“中国”即可。
-
在cmd命令行窗口执行以下命令配置用户信息:
hpm config set loginUser 邀请码
-
在cmd命令行窗口执行以下命令生成密钥:hpm gen-keys
成功后会在C:\Users\xxxx.hpm\key下生成两个文件
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发布步骤
-
在项目根目录粘贴upload.gradle 文件,这个脚本文件的内容基本是固定的,除个别需求,不需要修改。
注意:多库组件发布时,需注释掉已经上传完毕的build.gradle文件中的hapm相关配置信息,否则可能会导致后上传的库信息被覆盖。
-
注意:upload.gradle文件包含敏感信息,不能上传到gitee代码仓库。打开项目根目录.gitignore文件,添加下面内容,防止upload.gradle文件不小心上传到gitee远程代码仓库。
-
生成Release版本的har,要上传hapm模块下,执行packageReleaseHar,修改生成har名字为对应版本。
(可选:修改har包名称)生成的har包用于配置upload中 hpm.bundle.dirs属性,dirs里配置我们希望打包并发布到HAPM的文件,其中lib名字可以自定义,lib的值为har文件路径。我们发布的jar/har包文件名称,应该这样定义:库名称-版本号.jar/库名称-版本号.har,这样就和发布maven中心仓的jar/har对应了。
-
进入准备发布版本的组件库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包路径,不用修改)参数。
组件分类参照:
-
粘贴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系统上无法显示图片,可以自行把图片发布到到其他网站托管,引用其在线链接即可。
-
(可选: hpm-cli 版本为1.3.0,不必执行此步骤)使用cmd 打开控制台,更新 hpm-cli 版本到 1.3.0,(更新命令:npm update -g @ohos/hpm-cli),如已更新,不必执行此步骤。
验证hpm-cli版本的命令 hpm --version
更新 hpm-cli,命令 npm update -g @ohos/hpm-cli,如果执行命令之后开始执行更新,请等待
- (可选:如已确定jar/har已打包成功,可不执行此步骤)确保发布包内容正确验证:upload.gradle中命令行中添加 -p ,在命令中添加 -p 的意思是只打包不发布。
修改完成后保存,双击publish2hpm,然后会生成一个包含发布信息的tgz压缩包,如下图
将组件生成的tgz压缩包,粘到外面的文件夹,解压。
检查bundle.json内容是否正确,是否包含dirs属性,各字段以实际为准。
如果包含,删除 upload.gradle中的 -p,准备正式发布。
-
使用gradle 快捷命令 publish2hapm进行发布,执行成功即可。
-
验证,发布成功(有审核期,审核通过后)后,进入HAPM平台,下载发布成功的版本,解压查看是否包含我们希望打包发布的文件,如下图所示
附录: IDE 官方下载地址
IDE官方下载地址:https://developer.harmonyos.com/cn/develop/deveco-studio
终于可以搞事情了
真好 我终于发布了半个月了啊啊啊
npm安装hpm应该是:
npm install -g @ohos/hpm-cli
而非npm install –g @hpm/hpm-cli
组件HAPM发布 不支持个人开发者
不支持个人,那这个........有点打击士气啊
请问Maven发布直接就能通过吗
不需要经过审核吗
不需要审核
哈哈 hapm 看看就好目前
maven中心仓发布后需要等待一会才会刷新显示。可以去Nuxex管理平台自行查看https://s01.oss.sonatype.org/
有人知道这个是什么原因吗?