Eclipse-java.lang.ClassNotFoundException


95

JUnit-TestをEclipseから開始しようとすると、「ClassNotFoundException」が発生します。コンソールから「mvn test」を実行すると-すべて正常に動作します。また、Eclipseでは問題は報告されていません。

私のプロジェクト構造は次のとおりです:

  • 親プロジェクト(pom-packaging)
    • Webプロジェクト(war-packaging-私のJUnit-testはここにあります)
    • Flexプロジェクト
    • 構成プロジェクト

編集:クラスが見つからないのはなぜですか?これは、特別なライブラリのない単純なHelloWorldアプリケーションです。

これが私のJUnitの実行構成です: 代替テキストhttp://www.walkner.biz/_temp/runco​​nfig.png


Testclass(しかし、私が言ったように、単純なHelloWorldでは動作しません...):

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import biz.prognoserechnung.domain.User;
import biz.prognoserechnung.domain.UserRepository;
import biz.prognoserechnung.domain.hibernate.UserHibernateDao;

public class UserDaoTest {
/**
 * the applicationcontext.
 */
private ApplicationContext ctx = null;

/**
 * the user itself.
 */
private User record = null;

/**
 * Interface for the user.
 */
private UserRepository dao = null;

@Before
public void setUp() throws Exception {
String[] paths = { "WEB-INF/applicationContext.xml" };
ctx = new ClassPathXmlApplicationContext(paths);
dao = (UserHibernateDao) ctx.getBean("userRepository");
}

@After
public void tearDown() throws Exception {
dao = null;
}

@Test
public final void testIsUser() throws Exception {
Assert.assertTrue(dao.isUser("John", "Doe"));
}

@Test
    public final void testIsNoUser() throws Exception {
    Assert.assertFalse(dao.isUser("not", "existing"));
        Assert.assertFalse(dao.isUser(null, null));
        Assert.assertFalse(dao.isUser("", ""));
    }
}

3
JUnitが含まれていない単純なHelloWorldクラスを実行しようとすると、同じエラーが発生します...より正確には、java.lang.NoClassDefFoundError:HelloWorld原因:java.lang.ClassNotFoundException:HelloWorld
swalkner 09年

クラスを反映しようとすると、ClassNotFoundExceptionがスローされます。NoClassDefFoundErrorは、通常のメソッド呼び出しでクラスを使用しようとするとスローされます。
akf 2009年

テストクラスのコードを表示できますか?
akf 2009年

ビルドを自動的にオンまたはオフにしていますか?
Jon

自動的にビルドがオンになっている
swalkner

回答:


193

私はその状況に何度か遭遇し、何度も試した結果、解決策を見つけました。

プロジェクトのビルドパスを確認し、各フォルダーに対して特定の出力フォルダーを有効にします。プロジェクトの各ソースフォルダーを1つずつ移動して、Mavenが使用する出力フォルダーを設定します。

たとえば、Webプロジェクトのはsrc/main/java持つべきtarget/classesテストクラスを持っている必要があり、Webプロジェクトの下でtarget/test-classesWebプロジェクトの下となるようにも。

この構成を使用すると、Eclipseで単体テストを実行できます。

もう1つアドバイスがあります。Webプロジェクトのテストでリソースの下にある構成ファイルが必要な場合は、そのフォルダーをソースフォルダーとして含め、適切なビルドパス構成を作成してください。

それが役に立てば幸い。


1
こんにちはカルロス、あなたのアドバイスをたくさんありがとう。しかし、それは残念ながら助けにはなりませんでした。/ src / main / java(target / classes)と/ src / test / java(target / test-classes)をsrc / main / resources(applicationContext.xml、いくつかのプロパティ-target / classes)と同様にソースフォルダーに追加しました)。同じ問題-EclipseからJUnit-testとしてsrc / test / java / UserDaoTest.javaを開始すると、「クラスが見つかりませんUserDaoTest java.lang.ClassNotFoundException:UserDaoTest」が表示されます。少なくとも、これは元のエラーメッセージとは少し異なります
swalkner、2009

5
正しい方法で、UserDaoTestクラスがファイルシステム内の対応する出力フォルダーにあるかどうかを確認します(ご存じのとおり、Eclipseはすべてのソースファイルをコンパイルして、指定された出力フォルダーに配置します。テストを起動できます)。クラスが出力フォルダーに表示されない場合は、この特定のフォルダーのビルドパスの包含/除外フィルターを確認してください。幸運を。
カルロス、

私にとってこれは問題を解決しませんでした。AspectJの問題であることが判明しました。AspectJを使用している場合は、AspectJ機能を削除して読んでみてください
Stefan Haberl

1
同じ問題がありました。それは日食プロジェクト-Maven-gitの問題だと思います。それは実際にそれを絞り込むわけではありませんが、すべてのメタデータフォルダー(.project、.whatever ...)をワイプし、プロジェクトを削除して、Mavenプロジェクトが私のために機能したときにのみ再インポートします。また、eclipse-junitで実行できることがわからないものも見つかりました。テストメソッドを強調表示し、RunAs-Junitを選択すると、テスト全体ではなく、特定のテストメソッドのみが実行されます。@IgnoreあちこちにGUIショートカットはありません!
bgs

同じ問題に直面していたので、私は単にEclipse-> Project-> cleanを使用しましたが、うまくいきました。MVNクリーンは動作しませんでした。
Nutan

46

カルロスのアプローチが助けになりました! Eclipse-java.lang.ClassNotFoundException

junit実行構成のクラスパスを確認してください。

  1. 実行構成を開く
  2. 開始するjUnit-Testをクリックします
  3. クラスパスタブに移動します
  4. フォルダーを追加してみてください(ユーザーエントリをクリックし、[詳細設定]をクリックし、[フォルダーの追加]をクリックし、[ok]をクリックして、テストクラスの出力フォルダーを検索します(projektproperties Javaビルドパス、ソースの下にあるもの)

私のために働く。


2
これは非常に奇妙ではないですか?私にとってはうまくいきましたが、ターゲットクラスdirはプロジェクトのビルドクラスパスの一部です。特定のクラスを追加する必要があることはあまり意味がありません。
ホセ・ムアニス2011

このアクションは、何かがリロードされるのと同じくらい必要なディレクトリを追加する必要はないと思います。正常に実行された後、新しく追加されたディレクトリをすぐに削除でき、通常どおりに機能するはずです。また、上記のコメントは正しいです。参照されたカルロスからの表彰も賛成したいかもしれません。
2012年

私はこの問題でより役立つことが別のSO質問の答えを見つけました:stackoverflow.com/a/5718520/901641
ArtOfWarfare 2013年

16

ビルドクラスパスが正しいため、コンパイルできます。JUnitのクラスパスを確認する必要があります。[実行]メニューに移動し、[実行ダイアログを開く]を選択します。そこに、左側にJUnitをオプションとして持つツリーが表示されます。そのノードを開き、テストを見つけて選択します。右側のペインにクラスパスのタブが表示されます。テストがインスタンス化しようとしているクラスが見つかることを確認してください。

編集:

これは、リリースがデフォルトのEclipse出力フォルダーを変更した後のmavenとその動作の問題のようです。私はどこで説明されているソリューションを見てきました

  • mavenをjre作品の上のbootclasspathに配置する、または
  • ランニングmvn clean testはトリックをしますか
  • すべてのEclipseプロジェクトを更新し、再構築を行うと問題が修正されます
  • プロジェクトに行き、Maven-> Update Configurationを選択して問題を解決します

最初の3つでは、この問題が繰り返し発生するという報告がありました。ラストは私には最もよく見えますが、それがうまくいかない場合は、他のものを試してください。

ここここにいくつかの情報があります


1
残念ながら、「Maven => Update Configuration」は問題をまったく解決しません...逆は真です。ビルドパスの構成が削除されます...それとも、他の構成が間違っているという意味ですか?
swalkner 2009

@swalknerが指摘したとおり:Maven => Update configurationはビルドパスの設定を台無しにします。何らかの理由で、プラグインが除外フィルターを設定するため、コマンドを実行した後は常に手動で削除する必要があります
Stefan Haberl

「実行メニューに移動し、「実行ダイアログを開く」を選択します。えっ??どこにあるの?
ベリットラーセン

4

問題は、ビルドフォルダーにクラスファイルがない可能性があります。1つの解決策は、プロジェクトをクリーンアップして再構築することです。


4

[x]を有効にする一時JARを使用して、クラスパスを指定し(クラスパスの長さの制限を回避するため)実行構成の[クラスパス]タブ内でトリックを実行しました。

プロジェクトが巨大で、他の兄弟プロジェクトやMaven依存関係からの依存関係がたくさんある場合は、クラスパスの長さの制限に達する可能性があり、これが唯一の解決策のようです(ローカルのMavenリポジトリのディレクトリを短くすることは別として(すでに始まっています) c:/ m2)

ここに画像の説明を入力してください


3

ここには多くの複雑な提案があります。

ドラッグアンドドロップでリソースを移動した後、またはクラス名のリファクタリングを実行した後、Mavenプロジェクトでこの問題に何度も遭遇しました。

これが発生した場合.javaright-click -> Delete、Eclipseでターミナル/ファイルブラウザーを介して問題のテストケース()を別の場所にコピー(移動ではなく)し、オプションでディスクから削除することを選択します。コピーしたファイルを元のファイルの場所に移動/コピーします。次に、Eclipseでプロジェクトを選択し、F5キーを押してリソースを更新します。

これはすばやく簡単に実行でき、毎回問題が永久に修正されました。


私はそれがあなたの問題を永久に修正したのか、それとも毎回 ...
Amos M. Carpenter

3

私はまったく同じ問題を抱えていましたが、私はそれを理解しました!プロジェクトファイルに移動して右クリックし、RefreshF5をクリックまたはクリックします。次に、それを実行してみます。それでも機能しない場合は、忘れてください。まったく同じ問題が発生したため、Eclipseのバージョンがごみであるということです。


2

これが私の問題の解決策でした。もちろん、多くのことが原因で発生する可能性があります。私にとっては、EclipseのプラグインではなくMaven2がEclipseプロファイルを別のビルダー(aspectJ)を使用するように設定していたのですが、Eclipseにプラグインがありませんでした。

http://rbtech.blogspot.com/2009/09/eclipse-galileo-javalangclassnotfoundex.html

乾杯ラモンバックランド


2

Sachinの権利:正しいクラスパスがあっても、問題のタブには、依存関係またはリソース/プロジェクトにエラーがあり、Mavenがテストクラスの作成時または変更時にクラスを自動的に構築および作成するために修正する必要があるエラーが表示されます。

"こんにちは、

その非常に古い7月(年)ですが、同じ問題がありました。

実際の問題により、EclipseがJavaファイルのクラスファイルを生成できなかったことがわかりました。クラスパスは適切でした。

問題のタブを見て、プロジェクトに何か/ファイルがないかどうかを確認してください。新しいプロジェクトを作成し、ファイルを1つずつ追加して、クラスのコンパイルと作成が停止するまでビルドします(クラスについては、workspace / proj / bin / package /フォルダーを確認してください)

その奇妙ではあるが本当のecpliseは、20のJavaファイルのうち4つが、欠落している単一のイメージを使用していたため、補完に失敗していました。その結果、Javaファイルはコンパイルされませんでした。

CLASSPATHはここでは問題になりません。」


2

正確な例外があり(SpringSource Tools、tomcat、Win7を使用)、原因はファイル名をリファクタリング(ファイルの名前を変更)してSubDomain.javaからSubdomain.java(D対d)にしていて、SpringSourceが何らかの方法で衝突したためです新しい名前Subdomain.javaを示しています。解決策は、ファイルを(SpringSource経由で)削除し、Subdomain.javaという名前で再度作成し、以前のコンテンツをコピーして貼り付けることでした。そのような単純な。


Windowsをアップグレードする前にPCの互換性をチェックするプログラムを実行するまで、私は常にjunitテストケースを実行しました。それは何かを壊すようだったので、JUnitテストケースを再度実行することはできません。(および既存のすべての回答が機能しません)
CoffeDeveloper 2015

2

私はそのBulitパス--->ライブラリ--->ライブラリを追加---> Junitチェックjunit4を解決します


1

をクリックしてproject->properties->Java build path->Source、各srcフォルダがまだ存在するか、最近削除されたことを確認します。欠落しているパスまたは誤ったパスを修正し、テストを再ビルドして実行します。問題は修正されます。


1

私が行ったのは、プロパティ-> Javaビルドパス->注文とエクスポート->チェックされていないすべてのボックスを有効にした-> Junitを上に移動した


1

試しました

Link : [here][1]

Open your run configurations
Click on the jUnit-Test you want to start
go to the classpath tab
Try to add a folder (click on user entries, click on advanced, click on add folders,click on ok and search the outputfolder for your test classes(those you find under projektproperties java build path, source))

後に働いた

Maven 2 LifeCycle >>テスト


1

私はこのページのすべてのソリューションを試しました:プロジェクトの更新、再構築、すべてのプロジェクトのクリーンアップ、Eclipseの再起動、プロジェクトの再インポート(偶数)、Mavenの再構築、更新。何もうまくいきませんでした。うまくいったのは、クラスを新しい名前にコピーすることでした

これをしばらく我慢してから、次のように修正しました。

  1. 経由Runメニュー
  2. 選択する Run Configurations
  3. 単体テストに関連付けられている実行構成を選択します。
  4. Run ConfigurationDeleteキーを押すか、赤いXをクリックして、エントリをから削除します。

キャッシュされた実行構成で何かがおかしくなっているに違いありません。


1
あまりにも多くの時間を浪費した後、私は上記の手順を実行することになりました。次に、すべての実行テスト構成を削除するという決定的な決断を下しました。新しい実行構成がその中にプロジェクトを明確に示しているにもかかわらず(下にMavenの依存関係があります)、テストがクラスパスで見つかりません。私は日食がいかに壊れやすいかを忘れ続けています。その後、Eclipseでテストを実行することはできませんでした(特定のテストを選択する前に-ok)。最後に、以下のKomodoDaveの提案を試しました。その固定のもの...あなたはこのIDEに介してジャンプする必要が素晴らしいループ(シリーズの最新...)
ジャスティン・

1

Eclipseから(ハードディスクからではなく)プロジェクトを削除すると、ワークスペースがクリーンになり、プロジェクトをeclipseに再インポートすることができました。


1

通常、この問題は、Javaアプリケーションjavaツールの実行中にクラスファイルが見つからないときに発生します。

ほとんどの場合、Mavenプロジェクトでは、Eclipse-Mavenの同期の問題が原因でこの問題が発生します。この問題を解決するには:Maven-> Update Configuration


0

プロジェクトのルートを右クリックして「プロパティ」を選択し、CLASSPATHが正しいことを確認しましたか?私が正しく思い出せば、それがあなたのやり方です。

Eclipseがユニットテストを実行する方法について何か特別な方法でjunit JARをランタイムCLASSPATHに追加する必要がありますか?

IntelliJを使用しているため、これらの問題は発生しません。

私は自分でEclipseをチェックしますが、デスクトップには置かないようにします。


わかりました。EclipseとIntelliJのディスカッションはありません。Eclipseで実行したい... Javaビルドパスを確認しました-Java JDKがあり、HelloWorldの例では他に何も必要ありません...何か関係があると思います「ビルドパスのソースフォルダー」...パッケージを開始するフォルダーに設定します...正しいと思います。
swalkner 2009年

JDK以外のものが必要です-それがHelloWorld.classへのパスですよね?「ビルドパス上のソースフォルダー」-音が良くなります。仮定する必要はありません。実験家になって試してください。Eclipseは、あなたが正しいかどうかを教えてくれます。
duffymo

0

うーん、少し奇妙に見えます。クラスの上部に次の注釈を付けて実行してみてください。

@RunWith(SpringJUnit4ClassRunner.class)
public class UserDaoTest {
}

どうやってそれをやり遂げるか教えてください。

ビルドも自動的に有効になっていることを確認してください。テストクラスが正しくコンパイルされていることを確認する場合は、Mavenターゲットフォルダー(およびEclipseが使用している可能性のあるすべてのbinフォルダー)をクリアします。m2eclipseも使用していますか。少し問題があるようです。


あなたの答えに感謝しますが、それでもうまくいきません。最初に、spring-test.jarを含める必要があります。次に、別の依存関係が満たされていません。同じパッケージ内の単純なhelloworld-classでは機能しない理由がわかりません。そこに、あなたが提案したような「ハック」は必要ありません...「クラスパス」または類似の何かに何か間違いがあるはずですが、どこ/何をチェックする必要があるのか​​わかりません...
swalkner 2009年

0

私の問題と同様の解決策:ライブラリが無効でした。プロジェクトの.classpathファイルを見ると、key / value kind = "lib"を含むclasspathentryタグが表示されます。私の一部は不正確でした。

検証設定をオフにするまで、私はこれを発見しませんでした。つまり、JSPファイルなどに非常に多くのエラーがあり、クラスパスエラーは明白ではありませんでした(またはおそらく表示されていません)。その結果、宛先の出力フォルダーには何もコンパイルされませんでしたが、その理由に関する有用なエラーはありませんでした。


0

Windows> Preferences> Java> Installed JREから正しいJDKをポイントしてください。

jreを指すのではなく、適切なJDKを指すようにします。JDK 1.6U29を指定してプロジェクトを更新しました。

今後、問題はなくなり、jUnitテストは正常に機能します。

ありがとう、
-Tapas


0

最近、Eclipseで同じエラーに遭遇しました。つまり、構成をどのように変更しても、Eclipse IDEはユニットテストクラスを見つけることができませんでした。ここと他のWebサイトの以前の投稿から学んだように、「実行構成」と「Javaビルドパス」の両方で、クラスパスとソース情報をダブルチェックおよびトリプルチェックし、ソースフォルダーとライブラリを上下に移動しました"構成ウィンドウ、およびプロジェクトをクリーンアップして再構築しましたが、どのトリックも機能しません。特定のJavaプロジェクトは古いANTコンパイル済みプロジェクトであり、Eclipseライブラリーに多数のjarが含まれています。

次に、ユニットテストクラスを変更してmain()メソッドを追加し、右クリックしてJUnitテストではなくJavaアプリケーションを「別のユーザーとして実行」しました。突然、Eclipseが起動し、クラスを正しく識別したようです。その後、ユニットテストアプリケーションに戻しましたが、まだ機能しています。

これはEclipseのバグのようです。多数のライブラリ(> 260)が、JVMがJUnitクラスを見つける機能を混乱させているのではないかと思います。


0

私もこの問題に遭遇し、私の場合に十分な解決策を見つけることができました。Eclipseプロジェクトのプロジェクトルートに.classpathファイルがある場合(パッケージエクスプローラービューではなくナビゲータービューでそれを参照)、MavenクラスパスエントリーがJREコンテナークラスパスエントリーの前に表示されることを確認してください。

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>

プロジェクトに.classpathファイルがない場合は、プロジェクトのJavaビルドパスを編集して、順序とエクスポートを切り替えることができます。プロジェクトに.classpathファイルがあり、Javaビルドパスの順序のみを変更した場合、順序に影響はなく、問題は引き続き発生します。

そして、プロジェクト-> cleanは、変更を加えた後でも決して害を与えません。


0

テスト起動構成に次の行が含まれていないことを確認するか、自動化されたMaven依存関係管理を有効にしてみてください。

<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.classpathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.sourcepathProvider"/>

0

私はこの長い記事で読んだすべてを試しましたが、信じられないことに、私にとってうまくいったのは、テストクラスをRun as JUnit testクリックしてをクリックし、テストメソッドをクリックしてとして実行するのではありませんでしたJUnit test。なぜだか分かりませんか?


0

Eclipse内部からのJUnitテストでは、NoClassDefFoundErrorも得られました。コマンドラインから「mvn clean test」を実行すると、いくつかのjarで次のエラーが発生しました。無効なLOCヘッダー(不正な署名)これらのjarをローカルのm2リポジトリから削除し、「mvn clean test」を実行すると、問題が解決しました。


0

私も同じ問題を抱えていました。私がしたことはすべて、

私)。生成されたEclipseアーティファクト

mvn clean eclipse:eclipse

ii)。プロジェクトを更新し、junitテストを再実行します。正常に動作するはずです。


0

さらに、Eclipseの「Web Deployment Assembly」ダイアログをダブルチェックします。

これは次の場所にあります:プロジェクトのプロパティ->デプロイメントアセンブリ。

最近、eclipseプラグインでWebプロジェクトの1つを変更し、〜mysteriously〜がmavenテストディレクトリ/ src / test / java、/ src / test / resourcesをデプロイメントアセンブリに追加しました。UGGGG !!!

これが、まっすぐなmavenをtomcatにビルドしてデプロイしたときにプロジェクトが正常に機能した理由です。ただし、ClassNotFoundExceptionsはありません...しかし、Eclipse Whammoを介してデプロイしたときは、TestCodeがデプロイされているため、ClassNotFoundExceptionsの取得を開始します。

エリック


0

つまり、pom.xmlには未解決の問題があります。問題ビューを開き、それに応じて解決します。その後、classnotfoundexceptionに遭遇することなく、テストケースを正常に実行できます。


0

Javaビルドパスでクラスパスアーティファクトの順序を変更すると、解決されました。

  1. プロジェクトを右クリックして、プロジェクトのビルドパスに移動します。
  2. [注文とエクスポート]タブに移動し、JREシステムライブラリをソースの後に移動します。

これで修正されるはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.