教程第三步执行composer archive命令遇TypeNotFoundException错误
我来帮你拆解这个问题——你遇到的TypeNotFoundException: Type ChangeAssetValue is not defined in namespace org.acme.biznet错误,本质是Hyperledger Composer在你的业务网络定义中找不到指定的ChangeAssetValue类型,大概率是模型定义或项目结构出了小疏漏,下面是逐一排查的步骤:
检查CTO模型文件的类型定义
首先确认你的业务网络models目录下的CTO文件中,在org.acme.biznet命名空间下是否正确定义了ChangeAssetValue类型(不管是交易、资产还是参与者类型)。比如如果是交易类型,代码应该类似这样:namespace org.acme.biznet transaction ChangeAssetValue { --> Asset targetAsset o Double newValue }注意大小写完全敏感,拼写必须和报错里的
ChangeAssetValue完全一致。确认模型文件的位置
要保证包含ChangeAssetValue定义的CTO文件放在业务网络根目录下的models文件夹里——Composer只会自动扫描这个目录下的模型文件,如果文件放错了位置(比如直接放在根目录),就会导致类型无法被识别。核对业务网络的目录结构
你的项目结构必须符合Hyperledger Composer的标准规范,大致应该是这样:your-biznet-project/ ├── package.json ├── models/ │ └── your-model-file.cto ├── logic/ │ └── transaction-logic.js └── permissions.acl如果
models目录名拼写错误(比如写成model),或者文件层级不对,也会触发这个错误。清理缓存后重新执行命令
有时候之前生成的缓存文件会干扰新的定义,先执行清理命令:composer clean清理完成后再重新运行
composer archive create -t dir -n .命令试试。检查逻辑文件中的命名空间引用
如果你写了交易逻辑JS文件,要确保里面引用ChangeAssetValue时的命名空间和CTO文件一致,比如不要把org.acme.biznet.ChangeAssetValue写成org.acme.biznet.changeAssetValue(大小写错误)。
内容的提问来源于stack exchange,提问作者peKa

