0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EclipseからVS CodeへのJavaFX Gradleプロジェクト移行でハマった話

Posted at

はじめに

数か月前、Eclipseで開発していたJavaFXのGradleプロジェクトがあったのですが、環境が壊れやすく、AI補完ツールなども使えないので色々開発に支障が出ると感じたため、VS Codeに移行しようと試みました。
試行錯誤の末に解決できたので、同じような状況で困っている方の参考になればと思い、備忘録としてまとめます。

環境

  • OS: Windows
  • IDE: VS Code
  • 元のIDE: Eclipse (Pleiades)
  • Gradle: 8.x
  • Java: JDK 21
  • JavaFX: 21.x

発生した問題と解決までの道のり

主に以下の問題に直面し、一つずつ解決していきました。

1. JavaFXのクラスが見つからない (cannot be resolved)

問題: VS Codeでプロジェクトを開くと、import javafx... の行すべてと、ApplicationStage などのJavaFX関連クラスが「cannot be resolved」と表示され、ビルドも実行もできない。

原因:
build.gradle にJavaFXの依存関係が適切に定義されていないか、VS CodeがGradleプロジェクトとして正しく認識できていなかった。特に、Eclipseでプロジェクトを管理していた名残が原因でした。

解決策:

  1. build.gradle の整理:
    • plugins ブロックから id 'eclipse' プラグインを削除しました。
    • dependencies ブロックから org.openjfx:javafx-...:win のようなJavaFXの明示的なimplementation行を削除しました(org.openjfx.javafxpluginが自動で処理するため冗長)。
    • repositories から jcenter.bintray.com を削除しました(非推奨のため)。
  2. VS CodeとGradleの同期:
    • build.gradle を保存し、VS Codeのポップアップで「Yes」または「Always」を選択してクラスパスを更新。
    • VS Codeのターミナルで gradlew.bat clean build --refresh-dependencies を実行し、Gradleのキャッシュをクリアして再ビルド。
    • VS Codeを完全に再起動

2. アプリケーションがモジュールとして見つからない (Module ... not found)

問題: gradlew run を実行すると、「Error occurred during initialization of boot layer」や「java.lang.module.FindException: Module SampleProjectApp not found」というエラーが出て実行できない。

原因:
プロジェクトに module-info.java ファイルが存在しないにもかかわらず、build.gradle にJavaモジュールシステム(JPMS)に関する設定が残っていたため。(Eclipseではこれで動いていたのですが、まあエラーが出るなら消すしかねえか。)

解決策:

  • build.gradle から、以下のモジュールシステム関連の記述をすべて削除しました。
    • java { modularity.inferModulePath = true }
    • application { mainModule = 'SampleProjectApp' }
    • tasks.withType(JavaExec).configureEach { jvmArgs = [...] }
  • 再度 gradlew.bat clean build --refresh-dependencies を実行し、VS Codeを再起動。

3. プラグインが見つからない (Plugin ... not found)

問題: gradlew コマンド自体が、「Plugin [id: 'org.gradle.toolchains.foojay-resolver-convention', version: '0.8.0'] was not found」というエラーで失敗する。

原因:
settings.gradle.kts ファイルに記述されていたFoojay Resolverプラグインが、何らかの理由でGradleから取得できなかったため。

解決策:

  • settings.gradle.kts ファイルを開き、plugins ブロック内の id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" の行をコメントアウトまたは削除しました。
  • 再度 gradlew.bat clean build --refresh-dependencies を実行し、VS Codeを再起動。

4. メインクラスが見つからない (ClassNotFoundException: app.MainJava)

問題: gradlew run を実行すると、「エラー: メイン・クラスapp.MainJavaをロードできませんでした」や「java.lang.ClassNotFoundException: app.MainJava」というエラーが出て実行できない。

原因:
build.gradleapplication { mainClass = '...' } の設定が、実際のメインクラス名 (app.Main) と一致していなかった。また、EclipseでのFMXLロード問題への対策として記述していたカスタムのリソースコピー設定が、Gradleの標準的なクラスパス構築を妨げていた可能性。

解決策:

  1. mainClass の修正:
    • build.gradleapplication { mainClass = 'app.Main' } と、実際のメインクラス (src/main/java/app/Main.javapublic class Main extends Application) が完全に一致するように修正しました。
  2. カスタムリソースコピーの削除:
    • build.gradle 内の tasks.processResources 以降の、カスタムでリソースをbuild/classes/java/mainにコピーするようなタスク(copyResourcesToBinなど)とその依存関係をすべて削除しました。Gradleの標準的なリソース配置(build/resources/main)に任せる形にしました。
  • 再度 gradlew.bat clean build --refresh-dependencies を実行し、VS Codeを再起動。

まとめ

環境構築は本当に大変。だが、Eclipse時代のエラー吐いているのにアプリは動く、みたいな怖い現象が起こらなくなったのでハッピーです。

  • build.gradle はシンプルに、Gradleの標準的な挙動に任せる。
  • module-info.java がないなら、モジュールシステム関連の設定は削除する。
  • ファイル名とクラス名、mainClass の設定は正確に一致させる。
  • 何か変更したら、gradlew clean build --refresh-dependencies とVS Codeの再起動をセットで行う。

同じような課題に直面している方、こんな記事は読まずにAIに聞いて何とかしましょう。時間を無駄にするなよ!


0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?