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种:
-
将A模块源代码移动到本地工程中,使用overrides复写A的依赖关系,具体实现方式:
- 将A模块迁移到本地项目下方(与entry同级目录)。
- 在项目级oh-package.json5中使用overrides复写A的依赖关系,overrides会将BCD中的间接依赖复写使用项目级oh-package.json5中使用overrides下的依赖方式进行引用,由于A模块已经移动到本地工程下,使用file:./A方式进行本地依赖,可以正常找到A目录,即可解决A间接依赖报错。
-
将A.har发布到远程仓库,BCD使用远程仓库依赖方式下载,具体实现方式:
-
将A.har发布到远程仓库,修改BCD中依赖A方式,改成远程仓库依赖,也可以解决间接依赖下载安装报错问题。发布远程仓库参考:开发及引用共享包。
-
oh-package.json5中配置依赖:
"dependencies": { "A": "1.0.0" }
-
-
将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包依赖时,建议采用以下方案:
- 对于主工程的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"
- 需要修改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"
}
- 关键点说明:
- 使用相对路径"file:…/"引用同级目录下的HAR包
- 所有HAR包必须放在同一目录下
- 确保主工程和HAR包的依赖声明使用一致的引用方式
这种结构可以避免OHPM尝试从远程仓库获取依赖,同时保持正确的本地依赖关系。