LINEBOTのJavaサンプルプログラム(line-bot-sdk-java)をEclipseで編集する


背景

LINE BOT を作成しようと思い立ち、まずは練習のため、LINE公式が用意しているLINE BOTのJavaサンプルコード(line-bot-sdk-java/sample-spring-boot-kitchensink)に少し手を加えて、herokuにデプロイしようと試みました。
手を加える際にEclipseを使用したのですが、Eclipseにプロジェクト(line-bot-sdk-java)を認識させるのに大変苦労したので、その際に発生した問題と解決方法を以下に記録しておきます。

環境

  • Windows 10
  • Eclipse 4.8.0 → Eclipse 4.15.0 ※
  • Java 10
  • Git
  • heroku, heroku CLI

※後述の理由でEclipse4.8.0は使用できなかったので、Eclipse4.15.0に変更

問題1 プロジェクトをEclipseが認識しない

GithubからcloneしたプロジェクトをEclipseにインポートすることを試みました。

プロジェクト・エクスプローラーで右クリック→インポート→インポート→既存のGradleプロジェクトを選択し「次へ」→プロジェクト・ルート・ディレクトリーにline-bot-sdk-javaを選択し「完了」
※インポートする際は【Javaプロジェクト】ではなく【Gradleプロジェクト】を選択する必要があります。こちらを間違えるとうまくいきません。

そうすると、親プロジェクトである【line-bot-sdk-java】は認識されているものの、【sample-spring-boot-kitchensink】などのサブプロジェクト配下のソースがプロジェクト・エクスプローラーから消えてしまいました。

解決策:build.gradleの修正
調べてみると、line-bot-sdk-javaのプロジェクトの構成はマルチプロジェクト(親プロジェクトの下に、サブプロジェクトが存在する構成)だと分かりました。
(参考)Gradleでマルチプロジェクト

それを踏まえて調べると、こちらの記事がヒット。以下のように、build.gradleへeclipseプラグインの記述を1行追加することで、無事、Eclipseが全てのサブプロジェクトを認識するようになりました。

build.gradle
subprojects {
    apply plugin: 'com.github.spotbugs'
    apply plugin: 'java-library'
    apply plugin: 'checkstyle'
    apply plugin: 'io.franzbecker.gradle-lombok'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'eclipse' //この1行を追加する

(4/12 追記)
Spring Bootプラグインを導入した状態でインポートすると、わざわざbuild.gradleにeclipseプラグインの記述を追加しなくても、普通にインポートするだけで無事サブプロジェクトが認識されることが判明しました。そもそもSpring Bootプラグインを導入せずに進めてしまったことが根本原因かもしれません?

問題2 認識したプロジェクトにエラーが発生する

プロジェクトをEclipseに認識させることには成功したものの、なぜかエラーが多発する上に、プロジェクトを実行しようとしても【Spring Boot アプリケーションで実行】が見つかりません。

herokuにデプロイしたときは正しく実行されるので、コードの問題ではなく環境の問題であると考えました。

解決策1:Spring bootプラグインのインストール
そもそもSpring Boot アプリケーションなのに、EclipseにSpring Boot プラグインを導入していませんでした。

Spring Tool Suite(STS)のインストール手順 | 分かりやすく図解で説明
「第4章」Spring Tool Suite(STS)プラグインのインストール

以上のサイトを参考にSpring Boot プラグインを導入しようとしたのですが、eclipse マーケットプレイスで検索しても一向にプラグインがヒットしません。調べてみると、Eclipseのバージョンが4.8.0では該当のプラグインが導入できないことがわかりました。Eclipse 4.15.0をインストールしたことにより、無事Spring Boot プラグインを導入できました。

これで【Spring Boot アプリケーションで実行】が出てくるようになりましたが、相変わらずエラーは消えず、【Spring Boot アプリケーションで実行】を押してもビルドに失敗してしまい実行できません。

解決策2:Lombokプラグインのインストール
(この解決方法を見つけるのが大変だった、、、)

エラーが出ている箇所は、【getterが定義されていない】のような、特定のメソッドが定義されていないといったエラーが大半でした。調べてみると、コンパイル時にgetter,setter,ToStringなどのメソッドを自動生成するlombokというものがあるらしい。

(参考) Lombok 使い方メモ

これが怪しいと思い、以下の記事に記載されている手順でLombokプラグインをインストールすると、エラーが消えました。

(インストール手順) Lombok ①導入編

なお、Lombokプラグインのバージョンが最新の1.18.12を導入すると若干エラーが残ったので、build.gradleに記載してあるバージョン1.18.10で入れ直すと、若干残っていたエラーも消えました。

【備考】.gitignoreの記載

【Eclipseにプロジェクトを認識させる】こととは直接関係ありませんが、以下を.gitignoreに記載しておかないと、herokuやgithubにデプロイする際に、Eclipse固有のファイルなどがデプロイ対象に含まれてしまいます。
それを避けるため、以下を記載しました。

/.gradle/
/.gitignore

/.classpath
/.project
/.settings
/bin
/build

/*/.classpath
/*/.project
/*/.settings
/*/bin
/*/build

関連記事

前回の記事はこちら
LINEBOTのJavaサンプルプログラム(line-bot-sdk-java)のデプロイにて発生したトラブル