Hyperledger Fabric向Java Chaincode添加索引

问题描述

是否可以将索引添加到用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构建的问题。