问题描述
是否可以将索引添加到用Java编写的链码中?仅通过GO或JS查看教程和示例项目,有关Java的信息很少。如果我想向资产添加索引,我需要在GO中编写链码吗?
我将meta-inf文件夹放置在任何地方,但仍然没有创建索引。我开始认为,如果是Java,则depolyCC.sh脚本无法处理该脚本,或者在gradle.build文件中需要进行某些处理。可能是什么问题以及如何解决?
编辑
我通读了一些部署脚本。似乎对于Java,它在meta-inf的位置错误。由于meta-inf位于chaingode的根目录中,而gradle却不在,但是它位于build文件夹中,因此packageChaincode在build dir内,并且从未看到meta-inf。感觉我需要修改gradle.build以使打包程序看到meta-inf
elif [ "$CC_SRC_LANGUAGE" = "java" ]; then
CC_RUNTIME_LANGUAGE=java
infoln "Compiling Java code..."
pushd $CC_SRC_PATH
./gradlew installdist
popd
successln "Finished compiling Java code"
CC_SRC_PATH=$CC_SRC_PATH/build/install/$CC_NAME
packageChaincode() {
ORG=$1
setGlobals $ORG
set -x
peer lifecycle chaincode package ${CC_NAME}.tar.gz --path ${CC_SRC_PATH} --lang ${CC_RUNTIME_LANGUAGE} --label ${CC_NAME}_${CC_VERSION} >&log.txt
res=$?
{ set +x; } 2>/dev/null
cat log.txt
verifyResult $res "Chaincode packaging on peer0.org${ORG} has Failed"
successln "Chaincode is packaged on peer0.org${ORG}"
}
解决方法
为Java指定CouchDB索引与其他任何链码相同。确保将同一文件放置在目录中的同一位置。
META_INF/statedb/couchdb/indexes
在链码的根中。
找到了解决方案。基本上。 gralde installDist将所有内容都放置在build / install / basic文件夹中,但META-INF在根目录下。包装时不包括META-INF文件夹。我将复制命令添加到gradle.build中,以便它将META-INF文件夹复制到build / install / basic文件夹中。现在,在构建链码时,它包括位于build / install / basic文件夹中的META-INF并创建了索引。这是gradle构建的问题。