アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うことを書いてます。

STS(Spring Tool Suite)とspring-boot-starter-parentのバージョンアップにおける注意点(ハマりどころ)

 STS(Spring Tool Suite)とSpring-bootのバージョンアップ自体は、Mavenベースでやっていると比較的容易にできます。

 

その方法は別の記事で書きました。

arakan-pgm-ai.hatenablog.com

 

STSの更新の確認と、Mavenリポジトリで最新バージョン調べて、pom.xmlを書き直すだけですからね。

 

・・などと、油断していたら、ハマりました。

 

今回ハマったエラーは以下の3つです。

  • pom.xmlのエラー
  • Maven installなどの実行時エラー
  • Spring Bootアプリケーションの実行時エラー

pom.xmlのエラー

時点(2017/12/03)の最新版「2.0.0.M6」に「spring-boot-starter-parent」をあげようと思いました。

 

すると、pom.xmlにこのようなエラーがでます。

プロジェクト・ビルド・エラー: Non-resolvable parent POM for jp.bkjudg:bkjudg:0.9: Failure to find org.springframework.boot:spring-boot-starter-parent:pom:2.0.0.M6 in https://
repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced
and 'parent.relativePath' points at no local POM

 

ローカルリポジトリにキャッシュされていない?

 

ちょっと引っかかったのですが、とりあえず、エラーがとれないので、バージョンを少しずつさげて、1.5.8.RELEASEでエラーがなくなりました。

 

少々、気持ち悪いのですが、これはMavenのローカルキャッシュを更新しないとダメだということはわかったので、Maven installをやり直してみれば良いかな・・と考えたわけです。

 

Maven installなどの実行時エラー

Maven installを実行してみました。

f:id:arakan_no_boku:20171204222245j:plain

 

なんと、今度はJDKが見つからないからコンパイルできない・・というエラーが。

 

意味がわからない・・と思って、環境変数を調べてみると、自分で設定し覚えのない「C:\ProgramData\Oracle\Java\javapath」という記述が先頭に来てます。

 

どうも、これが悪さをしているのではないか?と思って、調べるとこんな記事がありました。

daregada.blogspot.jp

 

JAVA8になってから、JAVAの自動更新で勝手にパスを追加して、おかげでJDKのパスが見えなくなってるんですね。

 

余計なことするなあ・・と、ボヤきつつ、上記の記事を参考に環境変数のパスを修正して、STSを再起動して・・、なんとか、MAVEN INSTALL は終わりました。

Spring Bootアプリケーションの実行時エラー

ここで、ふと不安になりました。

 

どうも、今回は予想外のところでハマり続けているので、他も大丈夫か?・・と。

 

それで一応、1.5.8.RELEASEのままで、Spring Bootアプリケーションの実行をやってみました。

 

案の定・・。

 

コンソールには無情の例外が。

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication

 

ところが、不思議なことに以下のような現象が。

  • 新規にプロジェクトを作ると同じSpring-bootのバージョンでもアプリケーションの実行エラーにならない。
  • spring-boot-starter-parentのバージョンを、1.5.4.RELEASEに戻すとなんの問題もなく実行できる

 

そこから、約1日ハマりました。

 

で、原因なんですけど・・、意外なものでした。

 

STSのバージョンを新しいものに更新してから、spring-boot-starter-parentの既存のプロジェクトを変更しようとすると、こういう事が起きるみたいなのですね。

stackoverflow.com

 

その回答を訳します(Google翻訳です)

新しいSpring Starter Projectを作成してください。 File-> New-> Spring Start Projectに進みます。そして、最新の親バージョンを取得するデモプロジェクトを作成し、すべてのバージョンが動作するようにバージョンを変更します。 私はSTSを変更するたびにこれを行います。

 

自分もこれを参考にして、時点のspring-boot-starter-parentの最新バージョン「2.0.0.M7」で新規プロジェクトを作り直し、1.5.4.RELEASEで動作させていたものを移植しました。

 

まとめます

STS(Spring Tool Suite)の更新自体は問題ありません。

 

常に最新バージョンにするべきだと思います。

 

しかし、STSのバージョンをあげて、既存プロジェクトのspring-boot-starter-parentのバージョンだけを上げるのは、同じ様にSpring-Bootアプリケーションの実行でエラーが発生するリスクがあります。

 

そうなると、今のところ、新しいバージョンで新規スタータープロジェクトを作り直し、エラーなく動作するように既存プロジェクトから移植する以外に方法がないみたいです。

 

いやはや、疲れました。

 

f:id:arakan_no_boku:20170725215801j:plain