質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

5795閲覧

Eclipseにて、SpringBootAppilcationのアプリ・コントローラテストを実行時に、クラスが見つからないエラーが出ます

take-miya

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/05/12 13:22

編集2020/05/12 13:54

現在Gradleのマルチプロジェクトにて開発を行っています。
ルートプロジェクト
└ Apiプロジェクト
└ Webアプリ(APIプロジェクトのライブラリを参照)

起こっている事象

  • 開発を進める中で、プロジェクトを実行する場面があります(ApiをMainクラスから起動したり、WebAppの起動、テストクラスにてテストの実行など)。
  • 全てEclipseのGUIから対象ファイルを選択して、 右クリック -> [実行] -> [SpringBootAppの起動/JUnitテストの実行]  で行っています。

++ Apiプロジェクトならば、App.javaクラス
++ Webアプリ(APIプロジェクトのライブラリを参照)ならば、App.javaクラス
++ コントローラのテストならば、そのコントローラのテストクラス。

  • 上記を実行した際に、下記のエラーが検出され、そもそも実行することができません。
  • Eclipseのデバッグモードで起動しても、そもそもデバックモードの前に、下のエラーが検出され終了してしまいます。

bash

1# Apiのメインクラスを実行時のエラー 2エラー: メイン・クラスapi.Appを検出およびロードできませんでした 3原因: java.lang.ClassNotFoundException: api.App

bash

1# コントローラのテスト実行時のエラー 2Class not found api.controller.MailSendApiControllerTest 3java.lang.ClassNotFoundException: api.controller.MailSendApiControllerTest 4 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) 5 at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 6 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) 7 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:773) 8 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:502) 9 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:525) 10 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763) 11 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463) 12 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)

環境

  • Eclipse 2019-09
  • Java 12 (OpenJDK 12)
  • Gralde 5.6.2
[build.gradle] plugins { // Apply the java-library plugin to add support for Java Library id 'java-library' id 'java' id 'com.gradle.build-scan' version '2.0.2' id 'org.springframework.boot' version '2.1.9.RELEASE' id 'io.spring.dependency-management' version '1.0.7.RELEASE' }

試したこと

  • eclipseのプロジェクトクリーン、リフレッシュ、Gradleプロジェクトのリフレッシュ
  • eclipseの該当ワークスペースから、プロジェクトを削除。再度プロジェクトをインポート(既存Gradleプロジェクトとして)
  • 単体テストにてGradleでテスト実行

++ こちら実行したところGradleでは、Java10が参照されていました。Eclipseのワークスペース設定にて、コンパイルはJava12、インストール住みJREもJava12を指定しております。
++ このEclipseとGradleのversion不一致が一つの原因かと思いますが、解決方法がわかりません。

bash

1作業ディレクトリー: #自分のディレクトリです。 2Gradle ユーザー・ホーム: /Users/UserName/.gradle 3Gradle ディストリビューション: Specific Gradle version 5.6.2 4Gradle バージョン: 5.6.2 5Java ホーム: /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home 6JVM 引数: なし 7プログラムの引数: なし 8Build Scans Enabled: false 9Offline Mode Enabled: false 10Tests: api.controller.MailSendApiControllerTest 11> Task :compileJava NO-SOURCE 12> Task :processResources NO-SOURCE 13> Task :classes UP-TO-DATE 14> Task :compileTestJava NO-SOURCE 15> Task :processTestResources NO-SOURCE 16> Task :testClasses UP-TO-DATE 17> Task :test NO-SOURCE 18> Task :OneShot_API:compileJava FAILED 19 20FAILURE: Build failed with an exception. 21 22* What went wrong: 23Execution failed for task ':OneShot_API:compileJava'. 24> Could not target platform: 'Java SE 12' using tool chain: 'JDK 10 (1.10)'. 25 26* Try: 27Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. 28 29* Get more help at https://help.gradle.org 30 31Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0. 32Use '--warning-mode all' to show the individual deprecation warnings. 33See https://docs.gradle.org/5.6.2/userguide/command_line_interface.html#sec:command_line_warnings 34 35BUILD FAILED in 812ms 361 actionable task: 1 executed 37 38Publishing build scan... 39https://gradle.com/s/yl4mbcdqp752m

自分がJavaプロジェクト全般の理解に乏しく恐縮ですが、解決方法ご教示いただけましたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/05/12 13:37

>プロジェクト・クラス これは具体的に何を指しているのでしょうか。
take-miya

2020/05/12 13:43

書き方が曖昧でした以下の通りです。 - Apiプロジェクトならば、App.javaクラス - Webアプリ(APIプロジェクトのライブラリを参照)ならば、App.javaクラス - コントローラのテストならば、そのコントローラのテストクラス。
m.ts10806

2020/05/12 13:48

質問は編集できますので追記願います。 ただ・・・ Springアプリケーションとして実行するのでしたら、クラス自体ではなく、プロジェクトルートを選択して実行するものかと思いますが、mavenだけなんですかね(gradleのほうはあまり利用経験がないので)
take-miya

2020/05/12 14:28

質問編集いたしました。 ルートから実行すると、web.Appとapi.Appいずれを実行するか確認されると思います。 エディタ使わず、コンソールから実行すれば理解が深まるのかもしれませんが
guest

回答1

0

自己解決

こちら根本解決できたのかは不明ですが、一旦自己解決しました。

解決方法は以下です。

  • プロジェクトを右クリックし、 [Javaのビルドパス] -> [ライブラリ] を確認しました。
  • そこで、 [プロジェクトと外部の依存関係] にて、読み込めていないクラスパスがいくつかありました。
    -- それらのクラスパスは、 build.gradle にて、外部レポジトリではなく、プロジェクトのlib配下に設置しcompileする用に記述されていました。
  • 上記の記述を書き換え、mvncentralなどの外部レポジトリから取得するように変更しました。
  • 変更後、プロジェクト全体を再度ビルドし、新たに実行したところ、クラスが読み込めないエラーは発生しなくなりました。

イメージ説明

解決の経緯

  • 当初はEclipseや、Gradleなどの不具合を中心に調べていましたが、改めて出されているエラー 原因: java.lang.ClassNotFoundException を調べました。
  • また、Eclipseの問題には以下のエラーが出されていました。

ビルドパスエラーが解決されるまで、プロジェクトをビルドできません。

  • 上記二つの検索したところ、クラスが読み込まれていないのが原因という記事があり、それらを元に足りていないクラスまたライブラリが原因かもと考えました。
  • そうして試しにライブラリのクラスパスのエラーを解消したところ、上記のエラーは呼ばれなくなりました。

参考リンク

https://www.it-swarm.dev/ja/eclipse/%E3%83%93%E3%83%AB%E3%83%89%E3%83%91%E3%82%B9%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E8%A7%A3%E6%B1%BA%E3%81%95%E3%82%8C%E3%82%8B%E3%81%BE%E3%81%A7%E3%80%81%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82/970909556/

https://docs.oracle.com/javase/jp/8/docs/api/java/lang/ClassNotFoundException.html

https://ts0818.hatenablog.com/entry/2019/08/23/165818

http://misatlabmemo.hatenablog.com/entry/2013/06/07/105319

投稿2020/05/13 14:49

編集2020/05/13 14:58
take-miya

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問