web-dev-qa-db-ja.com

Eclipse-Java.lang.ClassNotFoundException

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

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

  • 親プロジェクト(pom-packaging)
    • Webプロジェクト(war-packaging-私のJUnitテストはここにあります)
    • フレックスプロジェクト
    • 構成プロジェクト

編集:どのようにクラスが見つかりませんか?これは、特別なライブラリのない単純なHelloWorldアプリケーションです。

これが私のJUnitの実行設定です。 alt text 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("", ""));
    }
}
93
swalkner

私はそのような状況に何度か遭遇しましたが、多くの試みの後、解決策を見つけました。

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

たとえば、Webプロジェクトのsrc/main/JavaにはWebプロジェクトの下にtarget/classesが必要であり、テストクラスにはWebプロジェクトの下にもtarget/test-classesが必要です。

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

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

それが役に立てば幸い。

192
Carlos

カルロスのアプローチが役に立ちました! Eclipse-Java.lang.ClassNotFoundException

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

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

私のために働く。

47
CoffeJunky

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

編集:

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

  • jreが動作する上記のbootclasspathにMavenを配置する、または
  • mvn clean testを実行すると、トリックが実行されます
  • すべてのEclipseプロジェクトを更新すると、再構築により問題が修正されます。
  • プロジェクトに行き、Maven-> Update Configurationを選択して問題を解決します

最初の3つでは、問題が繰り返し発生するという報告がありました。最後のものは私には最適ですが、うまくいかない場合は他のものを試してください。

here および here は情報です

17
akf

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

4
EvilFish

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

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

乾杯ラモンバックランド

3
Ramon

私はまったく同じ問題を抱えていましたが、私はそれを理解しました!プロジェクトファイルに移動して右クリックし、Refreshをクリックするか、F5キーを押します。その後、試して実行してください。それでも動作しない場合は、忘れてください。まったく同じ問題があり、Eclipseのバージョンがゴミだということです。

3
Starfox275

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

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

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

これは素早く簡単に実行でき、毎回問題を永久に修正しました。

3
KomodoDave

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

"こんにちは、

非常に古い7月(その年)ですが、私は同じ問題を抱えていました。

実際の問題により、EclipseはJavaファイルのクラスファイルを生成できず、クラスパスは適切でした。

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

20個のJavaファイルのうち4個が欠落している単一のイメージを使用していたため、妙でありながら真実だった。その結果、Javaファイルはいずれもコンパイルされませんでした。

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

2
kisna

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

2
wanfke

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

2
Romie

私がやったことは、プロパティ-> Javaビルドパス->順序とエクスポート->チェックされていないすべてのボックスを有効化-> Junitを上に移動したことだけでした。

1
Siddharth

ある意味ではワークスペースをクリーンアップし、プロジェクトをEclipseに再インポートしているEclipseから(ハードディスクからではなく)プロジェクトを削除すると、私にとってはうまくいきました。

1

このページですべてのソリューションを試してみました:プロジェクトの更新、再構築、すべてのプロジェクトのクリーン、Eclipseの再起動、プロジェクトの再インポート(偶数)、mavenの再構築、更新。何も機能しませんでした。 didの作業は、クラスを新しい名前にコピーすることでした。

しばらくこれを我慢した後、私はそれを次のように修正しました:

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

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

1
Gray

試行

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
user2246725

うーん、ちょっと奇妙に見えます。クラスの先頭に次の注釈を付けて実行してみてください。

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

そして、あなたがそれをどうやってやっていくか教えてください。

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

1
Jon

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

<?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 Build Pathを編集して、順序とエクスポートを切り替えることができます。プロジェクトに.classpathファイルがあり、Java Build Pathで順序を変更するだけの場合、順序が影響を受けず、問題が引き続き発生することがわかります。

そして、プロジェクト->クリーンは、変更を加えた後に物事を傷つけることはありません。

1
cmh

通常、この問題は、Java application Javaツールを実行してクラスファイルが見つからないときに発生します。

Eclipse-Maven syncの問題のため、主にMavenプロジェクトでこの問題が発生します。この問題を解決するには:Maven-> Update Configuration

1
Premraj

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

1
iunknown

類似した私の問題の解決策:ライブラリが無効でした。プロジェクトの.classpathファイルを見ると、key/value kind = "lib"のclasspathentryタグが表示されます。私の一部は間違っていました。

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

1
Mike

webアプリケーションの実行中に、ほとんどの人がこの例外を受け取ります。このエラーが発生した場合、適切なフォルダーに.classファイルを配置しています。

Webアプリケーションでは、すべての.classファイルはWEB-INF\Classesフォルダーに配置する必要があります。 EclipseでWebアプリを実行している場合は、手順に従ってください

ステップ1:プロジェクトフォルダを右クリックしてプロパティを選択しますステップ2:「Javaビルドパス」をクリックすると、「ソース」、「プロジェクト」、「ライブラリ」などのさまざまなタブが表示されますステップ3:ソースフォルダを選択しますこの下に、プロジェクトの詳細が表示されますステップ4:「ソース」フォルダーに、デフォルトの出力フォルダーオプションが表示されます。ここでは、WEB-INFの下にクラスフォルダーを指定する必要があります。 projectname/WebContent/WEB-INF/classesのようなパスを与えるだけで、構造はアプリケーションに依存します。ここでは、「classes」フォルダーを作成する必要がないことを覚えておいてください。 Eclipseが作成します。ステップ5:[OK]をクリックして、プロジェクトのクリーンとビルドを行います。これでアプリが実行されます。

0
Sahitya M

同じ問題がありました。私がしたことはすべて、

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

mvn clean Eclipse:eclipse

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

0
Vikram

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

これは、[プロジェクトのプロパティ]-> [展開アセンブリ]にあります。

最近、Eclipseプラグインを使用してWebプロジェクトの1つを修正し、〜ミステリアスに〜mavenテストディレクトリ/ src/test/Java、/ src/test/resourcesをDeployment Assemblyに追加しました。 UGGGG !!!

これは、ClassNotFoundExceptionsを使用せずにTomcatにまっすぐなMavenを構築してデプロイしたときに、私のプロジェクトが正常に機能した理由です。 TestCodeがデプロイされるため、ClassNotFoundExceptionsの取得を開始します。

エリック

0
Eric Manley

Junitテストを実行すると、Eclipse-Java.lang.ClassNotFoundExceptionが表示されます。プロジェクトに追加された外部jarファイルの1つを削除しました。 Eclipseからプロジェクトへのこのjarファイルの参照を削除した後。 Junitテストを実行できました。

0
user7639086

私はEclipseでgradleを使用しており、今日同じ課題に直面し、解決するためのいくつかの方法を試しましたが、私を助けた唯一の方法はコマンドgradlew cleanを実行することでした.

追伸=>「ビルド」を上記のコマンドと組み合わせないでください。

私を助けて、あなたの運を試してみてください。

0

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

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

これはEclipseのバグのようです。多数のライブラリ(260を超える)が、JUnitクラスを見つけるJVMの機能を混乱させる可能性があると推測しています。

0
Hongyu Zhang

プロジェクトをMavenテストとして実行してから、JUnitテストとして実行します。

0
Yao Li

Windows> Preferences> Java> Installed JREから正しいJDKを指定してください。

Jreを指さないで、適切なJDKを指してください。 JDK 1.6U29を指して、プロジェクトを更新しました。

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

おかげで、
-タパス

0
Tapas Adhikary

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

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

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

0
Sai Killi

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

0
Raju Rao

JUnit 4.4は、JMockit/JUnit統合ではサポートされていません。バージョン4.5以降のみがサポートされています。

0
Mahendra Rathod

[ビルドパス]-> [ソース]に移動し、すべてのソースフォルダーに対して[オプションのコンパイルの問題を無視]オプションを[はい]に切り替えます。

0
pavelb

テスト起動構成に次の行が含まれていないことを確認してください。OR自動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
thSoft

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

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

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

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

0
duffymo

この長い投稿で読んだすべてを試しましたが、テストクラスをクリックしてRun as JUnit testを選択し、テストmethodをクリックしてJUnit testとして実行するのではなく、信じられないほどうまくいきました。理由がわからない

0
snakedog

私は同じ問題に直面しました、私にとっては問題が異なります。これは、Mavenの依存関係の一部がダウンロードされていないためです。

a. I went through properties -> Java Buildpath -> Maven Dependencies and identified the missed libraries. 
b. Removed the missed libraries artifacts from pom.xml
c. Downloaded the libraries and added them explicitly.
0
Hari Krishna

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

0
RutgerDOW