1.はじめに
EclipseでSpring Bootアプリケーションを作成しようとした際に新規プロジェクトの
ウィザードがEclipseのバージョンやJDKの違い?によって出たり出なかったりしたので
調査結果を備忘録として結果を残していきます。
先に結論(追記)
どうして新規プロジェクトのウィザードが出たり出なかったりするの?
→各Eclipseが要求しているJDKの最低バージョンをこちらが守らなかったから
完全に自業自得でした。
2.実行環境、使用したソフト・JDKのバージョン
実行環境
Windows11
java version "1.8.0_291"
使用ソフト・JDK
Eclipse-2020-12-20201222
Eclipse-2021-12-20220106
Eclipse-2022-12-20230212
いずれもPleiades All in One のStandard Editionです
JDKは11及び17を使用して確認した
(Eclipse2022のFull Editionに付属していたものを使用しており環境変数には設定していない)
--launcher.appendVmargs
-vm
C:/Program Files (x86)/JDK/11/bin
-vmargs
-Dosgi.requiredJavaVersion=11
-Dsun.java.command=Eclipse
--launcher.appendVmargs
-vm
C:/Program Files (x86)/JDK/17/bin
-vmargs
-Dosgi.requiredJavaVersion=17
-Dsun.java.command=Eclipse
3. Eclipse-2020の場合
JDK11指定のとき
ファイル→新規→その他
しっかりSpring Bootの項目が存在しており、スターター・プロジェクトを指定すると
このようにウィザードは出せるが、Javaバージョンは17以上しか選択できないため
JDK11を指定している現状ではエラーが発生し、生成自体が失敗する
JDK17指定のとき
先程とはことなりウィザードの表示→プロジェクトの生成までは可能だが、
なぜJREシステム・ライブラリーがアンバインドされる
そのためJRE(JDK)の定義をウィンドウ→設定から行う
そうするとビルドが実行されて以下のエラーが発生する
エラーの発生原因はそもそもEclipse-2020がJDK17に対応していないことだと予想される
(正確な対応表は確認できていないがEclipse-2021からJava17に対応したという記述が確認されたため)
4. Eclipse-2021の場合
JDK11指定のとき
2020と違ってパッケージエクスプローラー内にも新規Springスターター・プロジェクトの作成項目が存在する
ファイル→新規→その他 にもしっかりあることが確認できる
また使用頻度高の部分に初めからいくつか表示されておりチェックも入っている
2020のときと同様にJavaバージョンは17以上しか選択できず11で起動している状態
なので同様のエラーが発生し生成に失敗する
JDK17指定のとき
ウィンドウ→設定からJDK17の設定を行うとビルドパスのエラーが解消し
特にエラーもなく実行まで可能
5. Eclipse-2022の場合
(このバージョンからiniファイルの初期JavaVersion指定が17になっている)
JDK11指定のとき
2021と違ってパッケージエクスプローラー内に新規Springスターター・プロジェクトの作成項目が存在しない
ファイル→新規→その他 からも確認できず、検索しても出てこないためウィザードが出せず生成できない
ウィンドウ→設定 内のSpring項目は2つだけ存在している
JDK17指定のとき
先程の11指定のときとは異なりパッケージエクスプローラー内に
新規Springスターター・プロジェクトの作成項目が存在するようになっている
また、ファイル→新規→その他 からも確認できるようになっている
生成後は問題なく実行まで行える
ウィンドウ→設定 内の項目もJDK11のときとは異なり増えている
6. 番外編 Eclipse2023の場合
JDK11指定のとき
そもそもEclipseが起動しなくなり以下のようなログが出力された
!SESSION 2024-04-21 12:27:34.374 -----------------------------------------------
eclipse.buildId=4.30.0.20231201-1200
java.version=11.0.18
java.vendor=Eclipse Adoptium
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=ja_JP
Framework arguments: -product org.eclipse.epp.package.java.product
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.java.product
!ENTRY org.eclipse.equinox.simpleconfigurator 4 0 2024-04-21 12:27:34.947
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.BundleException: Could not resolve module: org.eclipse.equinox.simpleconfigurator [2]
Unresolved requirement: Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=17))"
at org.eclipse.osgi.container.Module.start(Module.java:463)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1852)
at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1845)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1788)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1750)
at org.eclipse.osgi.container.SystemModule.startWorker(SystemModule.java:269)
at org.eclipse.osgi.container.Module.doStart(Module.java:605)
at org.eclipse.osgi.container.Module.start(Module.java:468)
at org.eclipse.osgi.container.SystemModule.start(SystemModule.java:193)
at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:445)
at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:464)
at org.eclipse.osgi.launch.Equinox.start(Equinox.java:139)
at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:338)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:251)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:651)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:588)
at org.eclipse.equinox.launcher.Main.run(Main.java:1459)
JDK17指定のとき
問題なく起動しSpringスターター・プロジェクトの作成も確認できる
5.わかったこと
・そもそもSpringBootの現行バージョン(3.xx)に対応しているJavaのバージョンが17以上となっているため対応バージョンが11までとなっている2020以前のバージョンでは新規作成できないと思われる。
・2021以降のバージョンかつiniファイルで設定するJDKを17以降にするとウィザードが出現し新規SpringBootアプリケーションを新規作成することができる
6.Wikiから確認できたこと(追記)
https://wiki.eclipse.org/Eclipse/Installation
そもそも2022-09以降ではJava17が最低バージョンとして求められているらしい
今回確認に用いた2022年版は2023-02となっているのでJDK11指定で起動してウィザードが表示されないのは完全にこちらが悪い()