HarmonyOS 私仓搭建

1. HarmonyOS 私仓搭建

  私仓搭建文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-ohpm-repo-quickstart-V5
在这里插入图片描述
  发布共享包[https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-har-publish-0000001597973129-V5]
在这里插入图片描述

1.1. 说明

  在Android和iOS开发中很多时候都以以二进制的产物的方式进行依赖和协作,Android基于Mave为仓库,iOS有Pod为仓库,我们可以在官方提供的的平台使用别人开放的库,极大的提高了大家的开发效率。但是有些公司业务相关的库并不想被外部人员使用,上传到外部共有的仓库就不是很安全,很多公司在内部搭建了私有仓库,一方面更加安全,另一方面平时推拉产物也更快。
  鸿蒙也是同样的问题,我们可以方便的在官方仓库平台使用三方开放的产物,但是公司内部业务还是需要依赖私有仓库,本文基于官方提供的工具搭建属于自己的私有仓库。
  本文介绍了鸿蒙平台私仓搭建以及私仓共享包依赖与发布流程,并介绍了工模块依赖的复杂应用场景一键打包上传的场景实践。

1.2. 鸿蒙共享包介绍

  鸿蒙共享包分静态共享包和动态共享包:
  HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。
  HSP(Harmony Shared Package)是动态共享包,静态共享包会打包到每个依赖的HAP里,这样导致包体积较大,且有重复多份公共资源和代码重复打包到应用中,动态共享包可以让多个HAP能够共享同一公共资源代码。HSP只支持在应用内共享,不支持跨应用共享

1.3. ohpm-repo私仓工具搭建私仓

  官方提供了ohpm-repo工具帮助开发者快速搭建轻量级的ohpm私有仓库,与 ohpm 包管理器兼容,并按需缓存所有依赖项,加速私有网络中的安装。
  ohpm-repo 支持单点部署和多实例部署:
  (1)单点部署:ohpm-repo 仅部署在一台机器上使用。
  (2)多实例部署:ohpm-repo 会部署到多台机器中,具有相同的配置内容,并且共享数据存储空间。

1.3.1. 依赖环境安装

  ohpm-repo 依赖于 node 运行,支持 node.js 16.x 及以上版本,需要先安装 nodejs,并进行环境配置。NodeJs安装可以从官网(https://nodejs.org/download/release/latest/)下载。

1.3.2. 下载ohpm-repo工具

  (1)下载ohpm-repo工具,下载地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-software-download-0000001507075446
  (2)解压ohpm-repo工具

1.3.3. 配置ohpm-repo环境变量

  将ohpm-repo工具包解压目录中bin目录的路径配置到系统环境变量path中:export PATH= O H P M − R E P O − P A T H / b i n : OHPM-REPO-PATH/bin: OHPMREPOPATH/bin:PATH
  执行命令ohpm-repo -v查看版本号,验证解压包完整无损

1.3.4. ohpm-repo服务配置文件配置

  进入解压目录的conf目录,打开config.yaml文件,默认配置如下:

##### server configuration section #####
listen: localhost:8088        # 建议修改为具体的ip/域名
# listen:
# - localhost:8088            # 监听本机环回地址
# - http://localhost:8088     # 监听本机环回地址
# - 0.0.0.0:8088              # 监听本机所有地址 (INADDR_ANY)
# 协议可配置 http 或者 https,默认为 http
# port: 1-65535(Window系统)/ 1024-65535(Linux或Mac系统)# 可选 (listen 为 https 协议时必须配置)
https_key: ''                 # https 服务使用的 key 的路径  (不配置默认为'')
https_cert: ''                # https 服务使用的 crt 的路径  (不配置默认为'')##### server deploy root section #####
deploy_root: ''                # 安装根目录 (不配置默认为 `<现有用户home目录>/ohpm-repo`),只支持绝对路径,且路径目录必须存在##### server numeric limit section #####
max_package_size: 300          # 上传包大小限制,单位是MB (0, 300],不配置默认为 300
max_extract_size: 800          # 压缩包解压后大小限制,单位是MB ,不配置默认为 800
max_extract_file_num: 30000    # 压缩包解压后文件个数限制,默认为30000个
user_rate_limit: 100           # 用户访问频率控制,单位是次/s (0, 10000],不配置默认为 100
fetch_timeout: 60              # 请求/响应的超时时间,单位是秒 (0, 3600],不配置默认为 60
keep_alive_timeout: 60         # TCP 保持连接的超时时间,单位是秒 (0, 3600],不配置默认为 60
api_timeout: 60                # api超时时间,单位是秒(0, 3600],不配置默认为 60
upload_lock_hour: 24           # 下架某一三方包所有版本后,限时禁止同名三方包上传,单位是小时 (0, 168],不配置,默认为 24
upload_max_times: 100          # 单用户24小时内上传次数限制 (0, 100000],不配置默认为 100
operation_log_retention: 100   # 数据库中操作日志保留时间,单位是天,不配置默认为 100
##### metadata storage section #####
## 数据存储类型 filedb 和 mysql 二选一,不可都配置
db:                         # 必须用 yaml 数组形式写法type: filedbconfig:                   # 如果想修改存储路径且保留旧的数据,则需要把旧路径下的数据文件迁移至新路径path: ./db              # 本地数据存储路径,不配置默认为<deploy_root>/db;#db:                        # 必须用yaml数组形式写法
#  type: mysql
#  config:
#    host: "localhost"      # 数据库主机地址
#    port: 3306             # 数据库端口 (0,65535]
#    username: tctAdmin         # 数据库的用户名
#    password: "password"   # 数据库的用户密码(请配置明文, 最终在部署目录中会转换为密文)
#    database: "repo"       # 数据库名##### storage section #####
## 文件存储类型fs,sftp 和 custom 三选一,不可多选。store:                               # 必须用 yaml 数组形式写法type: fsconfig:                            # 上传资源后如若要修改存储路径,则需要把旧路径下的数据迁移至新路径中path: ./storage                  # 已上架三方库存储路径,不配置默认为 <deploy_root>/storage;#server: http://localhost:8088   # 仓库下载链接地址,不配置取默认值# 文件存储类型为 sftp 时,最多配置三个 sftp
#store:                               # 必须用 yaml 数组形式写法
#  type: sftp                         # 当且仅当 db 的类型为 mysql 时,store 的类型才能为 sftp
#  config:
#    location:
#      -
#        name: test_one_sftp          # 主机名字名字不能与其他sftp配置重复
#        host: "localhost"            # 主机地址
#        port: 22                     # 主机端口 (0,65535]
#        read_username: "read"        # 主机有读权限的用户名字
#        read_password: "password"    # 主机有读权限的用户密码(请配置明文, 最终在部署目录中会转换为密文)
#        write_username: "write"      # 主机有写权限的用户名字
#        write_password: "password"   # 主机有写权限的用户密码(请配置明文, 最终在部署目录中会转换为密文)
#        path: /source22              # 相对 sftp 根目录的文件路径,仅限/开头,且路径文件夹必须存在
#      -
#        name: test_two_sftp
#        host: "localhost"
#        port: 24
#        read_username: "read"
#        read_password: "password"
#        write_username: "write"
#        write_password: "password"
#        path: /source24
#    #server: http://localhost:8088   # 仓库下载链接地址,不配置取默认值#store:
#  type: custom                                            # custom是自定义存储插件类型,自定义存储插件开发流程见指导文档
#  config:
#    export_name: CustomStorage                            # 插件export的类名
#    plugin_path: plugins/CustomStorage.js                 # 插件的绝对路径或者相对于ohpm-repo软件包的路径,建议将插件放在软件包的plugins目录下
#    custom_field: "test"                                  # 自定义字段,通过引入libs/common/getStorageConfigInfo.js的getStorageConfigInfo方法获取自定义字段的值
#    #server: http://localhost:8088                        # 仓库下载链接地址,不配置取默认值
##### 是否使用反向代理 #####
# 可选项:true,false, 默认:false。如果使用反向代理,需要配置为true,客户端IP地址将从请求头中的x-forwarded-for字段获取
use_reverse_proxy: false
##### uplink section #####
uplink_cache_path: ./uplink      # 缓存路径,不配置默认为 <deploy_root>/uplink
uplink_cache_time: 168           # 远程包 metadata 缓存时间,单位为小时,默认 168 小时,取值范围为 (0, 8760]##### log section #####
logs_path: ./logs                # 日志路径,不配置默认为 <deploy_root>/logs##### log level section #####
# 日志级别: 级别由低到高分别是 all、trace、debug、info、warn、error、fatal、mark、off
# run,operate 和 access 不配置或者配置错误,默认为 info
loglevel_run: info
loglevel_operate: info
loglevel_access: info##### auth plugin section #####
# 可选项,自定义认证插件配置
#auth_plugin:
#  name: CustomAuth              # 认证插件的名字
#  path: plugins/CustomAuth.js   # 插件的绝对路径或者相对于ohpm-repo软件包的路径,建议将插件放在软件包的plugins目录下##### compatibleSdkVersion等兼容性字段检测日志等级 #####
# 可选值:close、info、warn、error,默认:warn
compability_log_level: warn##### 是否允许下架被其他组件依赖的包 #####
# 可选项:true,false, 默认:false
allow_remove_depended_packages: false##### 是否使用文件上传新接口 #####
# 可选项:true,false, 默认:true
allow_new_file_upload_api: true

  包含监听端口、https配置、私仓部署目录deploy_root、服务相关配置server、存储配置db、日志logs等,按照实际情况配置即可。
  关于存储模块:
  db是元数据存储的配置项,db支持fileDB本地存储和mysql数据库存储
  store是文件存储的配置项,store支持local storage本地存储,sftp storage存储和custom storage 自定义插件存储。

1.3.5. 私仓成功启动后修改配置文件方法:

  首次启动私仓时执行install命令指定配置文件:找到指定的配置文件进行文件内容修改,然后重新执行install指定修改后的配置文件,再执行start启动私仓。
  首次启动私仓时执行install命令未指定配置文件:默认使用私仓压缩包解压路径下conf目录中的配置文件,修改该文件内容,然后重新执行install和start操作。

1.3.6. 安装启动

  执行ohpm-repo install安装,安装完成后根据配置设置环境变量,设置完成后执行ohpm-repo start启动服务。

1.4. 使用私仓共享包

  默认情况客户端ohpm工具,拉取依赖包只会从官方公开仓库拉取,想从私仓拉取需要进行额外的配置,配置方式有两种:
  (1)为所有项目配置该私有仓:1. ohpm config set registry <配置的私仓服务地址>/repos/ohpm
  (2)针对某次依赖安装配置:1. ohpm install @ohos/lottie --registry <配置的私仓服务地址>/repos/ohpm
  上面配置的私仓服务地址是配置文件中 store.config.server 的地址信息,例如: store.config.server :为 http://127.0.0.1:8088,则 registry 为:http://127.0.0.1:8088/repos/ohpm。如果store.config.server 没有配置,取默认值。

1.5. 发布共享包

  本地开发的共享包不管是静态共享包还是动态共享包,都可以通过ohpm命令工具或者使用Web页面来发布,一般开发工作中为了方便和效率,我们都使用命令行发布。
  (1)本地生成ssh秘钥:1. ssh-keygen -m PEM -t RSA -b 4096 -f <your_key_path>
  (2)登录 ohpm-repo 私仓管理地址,单击主页右上角的个人中心,新增公钥,将公钥文件(<your_key_path>.pub)的内容粘贴到公钥输入框中。
  设置私钥路径:ohpm config set key_path <your_key_path>
  (2)登录 ohpm-repo 私仓管理地址,单击主页右上角的个人中心,复制发布码。
  (3)将发布码配置到 .ohpmrc 文件中:ohpm config set publish_id <your_publish_id>
  (3)发布静态共享库:ohpm publish demo.har
  (4)发布动态共享:ohpm publish demo.tgz
  (5)动态共享包 HSP 包不能直接发布在私仓内,需要先转化为 .tgz 包
  (5)将编译模式切换成release模式会打包出.taz包

1.5.1. 模块配置

  (在库模块中(与src文件夹同一级目录下),添加如下文件:
  (新建README.md文件:在README.md文件中必须包含包的介绍和引用方式,还可以根据包的内容添加更详细介绍。
  (新建CHANGELOG.md文件:填写HAR的版本更新记录。
  (添加LICENSE文件:LICENSE许可文件。
  (README.md文件最终会展示在私仓网页平台,依赖使用方可以根据README.md说明直接使用,所以最好描述清晰。
  (oh_package.json5配置文件说明:

{  "parameterFile": "../dependencies.json5",  "keywords": [  "asr"  ],  "name": "@xx/base-asr",  "version": "1.0.0-rc.9",  "repository": "http://gerrit.google.com/mobile_harmony/base_asr",  "description": "asr sdk",  "main": "Index.ets",  "author": "qingkouwei",  "license": "Apache-2.0",  "dependencies": {  }  
}

  模块名称,版本号,说明都要符合要求,否会会上传私仓失败。版本号只能依次递增,无法向Android一样一个SNAPSHOT无限覆盖。

1.6. 场景实践

  在实际开发过程中,一个工程可能会有多个SDK,SDK开发完成需要接入到其他工程,有事在定位问题调试时可能要频繁的上传到私仓,其他工程依赖打包后调试,这样每次编译sdk,在执行命令上传特别繁琐,效率低下,特别是一个工程有多个SDK,并且SDK还有依赖的情况下。
  最好的办法是可以通过脚本一键编译和上传到私仓,并且根据依赖关系依次上传,也可以单独打包上传某个module。
  先创建一个version.json5存放SDK版本:

{  "project": {  "sdk_version": "1.1.0-rc.1",  }  
}

  自动打包:

def run_commands(modulename, productname):  hvigor_home = '/Applications/DevEco-Studio.app/Contents/tools/hvigor'  # 打包命令command1 = 'node %s/bin/hvigorw.js --mode module -p product=default -p module=%s@default -p buildMode=debug assembleHar --analyze --parallel --incremental --daemon' %(hvigor_home,modulename)  # 等待第一个命令执行完成  process1.wait()  # 上传命令  ohpm publish productnameprocess2.wait()
}

  自动修改版本号:

def changeVersionAModule():  with open('version.json5', 'r') as f:  data = json5.load(f)  versionName = data['project']['sdk_version']  with open('AModule/oh-package.json5', 'r') as f:  aData = json5.load(f)  aData['version'] = versionName  with open('AModule/oh-package.json5', 'w') as f:  json.dump(aData, f, indent=4)  with open('dependencies.json5', 'r') as depf:  depData = json5.load(depf)  depData['version_base']['base-a'] = versionName  with open('dependencies.json5', 'w') as depf:  json.dump(depData, depf, indent=4)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463417.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

根据问题现象、用户操作场景及日志打印去排查C++软件问题,必要时尝试去复现问题

目录 1、概述 2、通过现有信息无法定位问题时&#xff0c;则需要尝试去复现问题 3、非崩溃问题与崩溃问题的一般排查思路 3.1、非崩溃问题的排查思路 3.2、崩溃问题的排查思路 4、难以复现问题的可能原因总结 4.1、问题难以复现&#xff0c;可能和某种特殊的业务场景或操…

《JVM第3课》运行时数据区

无痛快速学习入门JVM&#xff0c;欢迎订阅本免费专栏 运行时数据区结构图如下&#xff1a; 可分为 5 个区域&#xff0c;分别是方法区、堆区、虚拟机栈、本地方法栈、程序计数器。这里大概介绍一下各个模块的作用&#xff0c;会在后面的文章展开讲。 类加载子系统会把类信息…

class 100 KMP算法原理和代码详解

1. KMP 算法介绍 1.1 暴力方法 暴力方法就是将两个字符串进行一个一个比较 这个知道就行了, 我们的重点是 KMP 算法 1.2 KMP 算法介绍 暴力方法的时间复杂度是&#xff1a;O(n * m), 使用 KMP 算法可以将时间复杂度优化到&#xff1a;O(n m). 暴力方法时间慢的原因是&…

不基于Gin手撸一个RPC服务

目标 实现一个GRPC框架&#xff0c;可以通过grpc-ui来对接口进行访问。也可以使用client来直接调用服务端服务 准备&#xff08;这边以Mac系统举例&#xff09; 安装homebrew&#xff08;如果没有安装的话&#xff09; /bin/bash -c "$(curl -fsSL https://raw.github…

大数据治理:策略、技术与挑战

随着信息技术的飞速发展&#xff0c;大数据已经成为现代企业运营和决策的重要基础。然而&#xff0c;大数据的复杂性、多样性和规模性给数据管理带来了前所未有的挑战。因此&#xff0c;大数据治理应运而生&#xff0c;成为确保数据质量、合规性、安全性和可用性的关键手段。本…

Web应用性能测试工具 - httpstat

在数字化时代&#xff0c;网站的性能直接影响用户体验和业务成功。你是否曾经在浏览网页时&#xff0c;遇到加载缓慢的困扰&#xff1f;在这个快速变化的互联网环境中&#xff0c;如何快速诊断和优化Web应用的性能呢&#xff1f;今天&#xff0c;我们将探讨一个强大的工具——h…

宝藏虚拟化学习资料大全

最近发现了关于虚拟化的宝藏资料&#xff0c;瑞斯拜&#xff01;原文链接如下&#xff1a; 500篇关于虚拟化的经典资料&#xff0c;含CPU虚拟化&#xff0c;磁盘虚拟化&#xff0c;内存虚拟化&#xff0c;IO虚拟化。 目录 &#x1fa90; 虚拟化基础 &#x1f343; 虚拟化分类&…

【源码+文档】基于SpringBoot+Vue旅游网站系统【提供源码+答辩PPT+参考文档+项目部署】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

微服务核心——网关路由

目录 前言 一、登录存在的问题归纳 二、*微服务网关整体方案 三、认识微服务网关 四、网关鉴权实现 五、OpenFeign微服务间用户标识信息传递实现 六、微服务网关知识追问巩固 前言 本篇文章具体讲解微服务中网关的实现逻辑、用于解决什么样的问题。其中标题中标注* 涉…

移植 AWTK 到 纯血鸿蒙(HarmonyOS NEXT)系统 (0) - 序

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (0) - 序 前段时间纯血鸿蒙系统 HarmonyOS 5.0&#xff08;又称 HarmonyOS NEXT&#xff09;正式推出&#xff0c;这是继苹果 iOS 和安卓系统后&#xff0c;全球第三大移动操作系统。纯正国产操作系统登场&#xff0c;国人无不欢…

docker-compose安装rabbitmq 并开启延迟队列和管理面板插件(rabbitmq_delayed_message_exchange)

问题&#xff1a; 解决rabbitmq-plugins enable rabbitmq_delayed_message_exchange &#xff1a;plugins_not_found 我是在docker-compose环境部署的 services:rabbitmq:image: rabbitmq:4.0-managementrestart: alwayscontainer_name: rabbitmqports:- 5672:5672- 15672:156…

SpringBoot AOP介绍、核心概念、相应实现

文章目录 AOP介绍AOP的核心概念切面(Aspect)切点(Join Point)语法具体解释 增强(Advice)织入(weaving) 相应实现权限校验日志输出 AOP介绍 AOP全称Aspect Oriented Programming意为面向切面编程&#xff0c;通过预编译和运行期间通过动态代理来实现程序功能统一维护的技术。AO…

Python 数据结构对比:列表与数组的选择指南

文章目录 &#x1f4af;前言&#x1f4af;Python中的列表&#xff08;list&#xff09;和数组&#xff08;array&#xff09;的详细对比1. 数据类型的灵活性2. 性能与效率3. 功能与操作4. 使用场景5. 数据结构选择的考量6. 实际应用案例7. 结论 &#x1f4af;小结 &#x1f4af…

CSS 超出一行省略号...,适用于纯数字、中英文

文本超出显示省略号... 代码&#xff1a; .ellipsis{ overflow: hidden; -webkit-line-clamp:1; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; word-break: break-all; /** 纯数字、中英文都适用 */ }

C/C++中标准的输入输出

一、c语言的标准输入输出 c语言的标准输出函数式printf&#xff0c;它可以将用户设置的变量输出到控制台&#xff1b;标准的输入函数式scanf&#xff0c;接收用户在控制台的输入数据&#xff0c;注意&#xff0c;如果使用的是visual stdio编译器&#xff0c;会提示使用scanf_s…

Elasticsearch中时间字段格式用法详解

Elasticsearch中时间字段格式用法详解 攻城狮Jozz关注IP属地: 北京 2024.03.18 16:27:51字数 758阅读 2,571 Elasticsearch&#xff08;简称ES&#xff09;是一个基于Lucene构建的开源、分布式、RESTful搜索引擎。它提供了全文搜索、结构化搜索以及分析等功能&#xff0c;广泛…

Java实战项目-基于SpringBoot+Vue的二手车交易系统的研究与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Redis安装与使用 + Springboot整合Redis

Redis安装与使用 Springboot整合Redis 前言Redis简介Redis优势 Redis安装Windows1.相关配置2.启动Redis服务3.连接Redis&#xff0c;进行操作4.测试一些Redis命令 Linux Springboot项目整合使用Redis1.添加Maven依赖2.配置Redis相关属性3.在测试类中进行测试 结语 &#x1f60…

lust变频器维修电梯变频器CDD34.014.W2.1LSPC1

LUST伺服在安装时须注意&#xff0c;不可有任何的铁屑、螺丝、导线等掉人驱动器内。在安装完成后应作基本的检测动作&#xff0c;如对地阻抗&#xff0c;和短路检测等。 所有的安装及使用事项需要符合安全规定&#xff0c;并且也需要符合当地的相关规定和灾害预防措施。DC BUS…

在VSCode中读取Markdown文件

在VSCode安装Markdown All in One或Markdown Preview Enhanced即可 插件Markdown All in One GitHub&#xff1a;https://github.com/yzhang-gh/vscode-markdown v3.6.2下载链接&#xff1a;https://marketplace.visualstudio.com/_apis/public/gallery/publishers/yzhang/vs…