LoginSignup
2
1

More than 3 years have passed since last update.

HFC_SDK(1.3)とJava11の相性はそこまで良くなかったので簡単に対応した話

Last updated at Posted at 2018-10-25

2018/10/29(月)追記

はじめに

タイトル通りです。

Java11で、HyperledgerFabricClient_SDK(HFC_SDK)の1.3系を使おうとしたら、少しハマったのでメモ。

公式では、「Java8以降を使いましょう」と書いてあったので、安易に「Java11でも行けるじゃん」と思ったら、素直にはいけませんでした。
Java9でいろいろとDeprecateされたことが原因のようです。

ブロックチェーンでのアプリやシステム開発というと、Ethereumのほうが有名ですが、パブリックで使う予定もなく、Javaエンジニアなので、とっつきやすそうなHyperledgerFabricを使っています。

書いてないこと

  • 各種インストール方法、使い方

環境

  • macOS High Sierra 10.13.6
  • Java11
  • Hyperledger Fabric 1.3
  • Apache Maven 3.5.4

HFC_SDKのインストール

ダウンロード

  • 公式GitHub参照
  • 難しいことなんてことはなく、gitからクローンします。
    • git clone https://github.com/hyperledger/fabric-sdk-java.git
  • ディレクトリを移動します
    • cd fabric-sdk-java/
  • バージョンを変更したい場合は、コマンド一発いれるのですが、変更しないのでこのままです

jarの作成

  • 本来ならmvn installなどを実行すれば./target配下にjarが作成されるのですが、下記のようなエラーが吐き散らかされました。(一部抜粋)
$ mvn install
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /fabric-sdk-java/target/generated-sources/protobuf/grpc-java/org/hyperledger/fabric/protos/peer/EventsGrpc.java:[23,18] シンボルを見つけられません
  シンボル:   クラス Generated
  場所: パッケージ javax.annotation
[ERROR] /fabric-sdk-java/src/main/java/org/hyperledger/fabric/sdk/transaction/ProtoUtils.java:[23,22] パッケージjavax.xml.bindは存在しません
[ERROR] /fabric-sdk-java/src/main/java/org/hyperledger/fabric/sdk/EventHub.java:[24,22] パッケージjavax.xml.bindは存在しません
[ERROR] /fabric-sdk-java/src/main/java/org/hyperledger/fabric/sdk/ProposalResponse.java:[10,22] パッケージjavax.xml.bindは存在しません
[ERROR] /fabric-sdk-java/target/generated-sources/protobuf/grpc-java/org/hyperledger/fabric/protos/peer/EndorserGrpc.java:[20,18] シンボルを見つけられません
  シンボル:   クラス Generated
  場所: パッケージ javax.annotation
[ERROR] /fabric-sdk-java/src/main/java/org/hyperledger/fabric/sdk/transaction/LSCCProposalBuilder.java:[20,35] パッケージorg.omg.CORBA.DynAnyPackageは存在しません

// pom.xml 
<!-- https://search.maven.org/artifact/javax.xml.bind/jaxb-api/2.3.0/jar -->
<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>2.3.0</version>
</dependency>

<!-- https://search.maven.org/artifact/javax.annotation/javax.annotation-api/1.3.2/jar -->
<dependency>
  <groupId>javax.annotation</groupId>
  <artifactId>javax.annotation-api</artifactId>
  <version>1.3.2</version>
</dependency>
  • 同様に、org.omg.CORBA.DynAnyPackageも追加しようと思いましたが、どうやらサポートされていないようです。
    • ログを見る限り、使用しているファイルは1つだけで、特に使っていなさそうなので、import文を削除してしまいます。
$ vi /fabric-sdk-java/src/main/java/org/hyperledger/fabric/sdk/transaction/LSCCProposalBuilder.java

package org.hyperledger.fabric.sdk.transaction;

import org.hyperledger.fabric.protos.peer.Chaincode;
import org.hyperledger.fabric.protos.peer.FabricProposal;
import org.hyperledger.fabric.sdk.exception.InvalidArgumentException;
import org.hyperledger.fabric.sdk.exception.ProposalException;
import org.omg.CORBA.DynAnyPackage.Invalid; // ←これを削除する

import static org.hyperledger.fabric.protos.peer.Chaincode.ChaincodeSpec.Type.GOLANG;

public class LSCCProposalBuilder extends ProposalBuilder {
  • 改めて、コマンドを実行します。なお、(絶大な信頼の元)テストはスキップしています。
    • mvn install -DskipTests
$ mvn install -DskipTests
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Detecting the operating system and CPU architecture
[INFO] ------------------------------------------------------------------------
[INFO] os.detected.name: osx
[INFO] os.detected.arch: x86_64
[INFO] os.detected.classifier: osx-x86_64
[INFO] 
[INFO] ----------< org.hyperledger.fabric-sdk-java:fabric-sdk-java >-----------
[INFO] Building fabric-java-sdk 1.3.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------

略

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 44.412 s
[INFO] Finished at: 2018-10-25T10:30:43+09:00
[INFO] ------------------------------------------------------------------------
  • 確認してみます
$ ls -l target
total 5984
-rw-r--r--   1 nobkovskii  staff    25539 10 25 10:30 checkstyle-cachefile
-rw-r--r--   1 nobkovskii  staff     6637 10 25 10:30 checkstyle-checker.xml
-rw-r--r--   1 nobkovskii  staff    27946 10 25 10:30 checkstyle-result.xml
drwxr-xr-x   5 nobkovskii  staff      160 10 25 10:25 classes
drwxr-xr-x   3 nobkovskii  staff       96 10 25 10:26 coverage-reports
drwxr-xr-x   2 nobkovskii  staff       64 10 25 10:26 diagDump
-rw-r--r--   1 nobkovskii  staff  2998085 10 25 10:30 fabric-sdk-java-1.3.0-SNAPSHOT.jar
drwxr-xr-x   4 nobkovskii  staff      128 10 25 10:10 generated-sources
drwxr-xr-x   3 nobkovskii  staff       96 10 25 10:26 generated-test-sources
drwxr-xr-x   3 nobkovskii  staff       96 10 25 10:30 maven-archiver
drwxr-xr-x   3 nobkovskii  staff       96 10 25 10:10 maven-status
drwxr-xr-x   3 nobkovskii  staff       96 10 25 10:30 protoc-dependencies
drwxr-xr-x   4 nobkovskii  staff      128 10 25 10:10 protoc-plugins
drwxr-xr-x   3 nobkovskii  staff       96 10 25 10:30 site
drwxr-xr-x  17 nobkovskii  staff      544 10 25 10:26 test-classes
  • 無事fabric-sdk-java-1.3.0-SNAPSHOT.jarが作成されていますね。あとは、このjarを各々のIDEになどでインポートしましょう。
    • ※そもそも、このjarってどっかに落ちてたりするのかしら・・・

今回はここまでです。

ユーザが少ないのか、情報が少なくて寂しい。
Ethereumもいいけど、HyperledgerFabricも触ろうぜ!!
次回は、Javaとの連携とか書きたいなぁ。

ありがとうございました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1