HarmonyOS鸿蒙Next中Har包依赖路径问题

HarmonyOS鸿蒙Next中Har包依赖路径问题

我开发了四个har库为A.har B.har C.har D.har

其中A.har 不依赖任何库 作为基础库

(1)B.har依赖A.har (2)C.har依赖A.har (3)D.har依赖A.har,B.har,C.har

然后这个时候我的主工程需要把A,B,C,D都依赖导入,而且ABCD均在同一文件夹下面,要如何对BCD的dependencies做修改,

目前我的BCD的dependencies中指定了版本号,但是主工程有依赖了openharmony的第三方库,导致BCD无法指定本地路径,一直报错。

报错如下:

ohpm INFO: MetaDataFetcher fetching meta info of package 'A' from https://ohpm.openharmony.cn/ohpm/
ohpm INFO: MetaDataFetcher fetching meta info of package 'B' from https://ohpm.openharmony.cn/ohpm/
ohpm INFO: MetaDataFetcher fetching meta info of package 'C from https://ohpm.openharmony.cn/ohpm/
ohpm WARN: fetch meta info of package 'A' failed - GET https://ohpm.openharmony.cn/ohpm/A 404( undefined
ohpm ERROR: Error: 00617101 Fetch Pkg Info Failed
Error Message: FetchPackageInfo: "A" failed
╰→ Caused by:
  Original Error: NOTFOUND package 'A' not found from all the registries https://ohpm.openharmony.cn/ohpm/
ohpm ERROR: Error: 00617101 Fetch Pkg Info Failed
Error Message: FetchPackageInfo: "A" failed
╰→ Caused by:
  Original Error: NOTFOUND package 'A not found from all the registries https://ohpm.openharmony.cn/ohpm/
ohpm WARN: fetch meta info of package 'B' failed - GET https://ohpm.openharmony.cn/ohpm/B  404( undefined )
ohpm ERROR: Run install command failed 
Error: 00617101 Fetch Pkg Info Failed
Error Message: FetchPackageInfo: "A" failed
╰→ Caused by:
  Original Error: NOTFOUND package 'A' not found from all the registries https://ohpm.openharmony.cn/ohpm/

这种情况下,我要如何指定这四个库的本地路径,避免使用远端仓库呢? oh-package.json5中的dependencies如下

"A": "file:./src/main/lib/A.har",
"B": "file:./src/main/lib/B.har",
"C": "file:./src/main/lib/C.har",
"D": "file:./src/main/lib/D.har",

更多关于HarmonyOS鸿蒙Next中Har包依赖路径问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

【修改建议】
上述问题,核心解决方式是让本地工程安装间接依赖时,保证可以正常下载到间接依赖,解决方式有以下3种:

  1. 将A模块源代码移动到本地工程中,使用overrides复写A的依赖关系,具体实现方式:

    • 将A模块迁移到本地项目下方(与entry同级目录)。
    • 在项目级oh-package.json5中使用overrides复写A的依赖关系,overrides会将BCD中的间接依赖复写使用项目级oh-package.json5中使用overrides下的依赖方式进行引用,由于A模块已经移动到本地工程下,使用file:./A方式进行本地依赖,可以正常找到A目录,即可解决A间接依赖报错。
  2. 将A.har发布到远程仓库,BCD使用远程仓库依赖方式下载,具体实现方式:

    • 将A.har发布到远程仓库,修改BCD中依赖A方式,改成远程仓库依赖,也可以解决间接依赖下载安装报错问题。发布远程仓库参考:开发及引用共享包

    • oh-package.json5中配置依赖:

      "dependencies": {
          "A": "1.0.0"
      }
      
  3. 将A打成A.har,给BCD进行依赖,具体实现方式(不推荐):

    • 将A打成A.har:Build->Make Module ‘A’

    • 在BCD中创建libs目录(与src平级),将A.har包放到libs目录下,并进行依赖:

      // BCD   oh-package.json5
      "dependencies": {
        'A':'file:./libs/A.har'
      }
      
    • 再将BCD打成har包,供本地工程使用,就不会再报错。

更多关于HarmonyOS鸿蒙Next中Har包依赖路径问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,Har包的依赖路径配置需在模块级build-profile.json5中声明。使用"dependencies"字段添加Har依赖,格式为"har:模块名"。例如:

"dependencies": [
  "har:module_name"
]

Har包需预先通过DevEco Studio打包生成,并存放在模块同级目录或指定路径下。构建时会自动解析依赖关系。路径错误会导致编译报错"har not found"。

在HarmonyOS Next中处理本地HAR包依赖时,建议采用以下方案:

  1. 对于主工程的oh-package.json5,保持当前写法是正确的:
"A": "file:./src/main/lib/A.har",
"B": "file:./src/main/lib/B.har",
"C": "file:./src/main/lib/C.har",
"D": "file:./src/main/lib/D.har"
  1. 需要修改B/C/D三个HAR包的依赖声明方式:

在B.har的oh-package.json5中:

"dependencies": {
  "A": "file:../A.har"
}

同理处理C.har和D.har:

  • C.har同样引用"file:…/A.har"
  • D.har需要同时引用三个依赖:
"dependencies": {
  "A": "file:../A.har",
  "B": "file:../B.har",
  "C": "file:../C.har"
}
  1. 关键点说明:
  • 使用相对路径"file:…/"引用同级目录下的HAR包
  • 所有HAR包必须放在同一目录下
  • 确保主工程和HAR包的依赖声明使用一致的引用方式

这种结构可以避免OHPM尝试从远程仓库获取依赖,同时保持正确的本地依赖关系。

回到顶部