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は存在しません
-
javax.xml.bind
とjavax.annotation
とorg.omg.CORBA.DynAnyPackage
が無いと言っているようです。-
pom.xml
に依存関係を追加してあげました。 - バージョンは適宜変更してください
-
// 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
文を削除してしまいます。
- ログを見る限り、使用しているファイルは1つだけで、特に使っていなさそうなので、
$ 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との連携とか書きたいなぁ。
ありがとうございました。