2011-07-18 18 views
0

私は2つの異なるJavaプロジェクト(簡単にするためにプロジェクト1とプロジェクト2を呼びます)をEclipseにロードし、プロジェクト1をプロジェクト2のビルドパスに追加します。私はプロジェクト2用のテストクラスにプロジェクト1のsrcフォルダ内のみのパッケージをインポートし、そのテストクラスのコード内で私は、次のようなプロジェクト1からクラスの単純なオブジェクトの宣言を持っている:クラスがビルドパス上にあるにもかかわらず、クラスネストClassNotFoundExceptions

ProjectOneClass object = new ProjectOneClass(); 

このコードはエラーなしでコンパイルされ、コンパイラはこれらのクラスがビルドパス上にあることを認識します。しかし、Junit4でJavaアプリケーションとしてコードを実行すると、これらのコード行に渡ってClassNotFoundExceptionsがスローされます。コードはこれらのClassNotFoundExceptionsをエラーログに出力することになっていますが、何らかの理由で何も印刷されていません。私は単純なものを使用しています

try { 
    ... 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} 

構造だから、なぜ私はエラーログに印刷されていないのかわかりません。

JUnitのプリントアウトは単純です:

Junit execution complete 
Summary: 4 succeeded, 3 failed. 

成功4は、インポートされたプロジェクト1パッケージを参照しません。

私はビルドパス設定の変更方法を試してみましたが、改善の約束は何もありませんでした。私が考えることができるのは、ビルドパス設定ウィンドウの[注文とエクスポート]タブで指定されたビルドパスの順序です。今すぐ注文があります:

project 2 packages 
EAR Libraries 
JRE System Libraries 
JUnit4 
a few JAR files (c3p0, commons-codec, ojdbc6) 
project 1 

問題がここにあるかどうかはわかりませんが、もし誰かがこれで私を助けることができたら、私はとても感謝しています。読んでくれてありがとう。

+0

どのように実行していますか、エラー出力はどのように見えますか? –

+0

ProjectOneClassはJARファイルにありますか? – bcoughlan

+0

私はどのように私はそれを実行しているとエラーログの情報に関する詳細との投稿を編集しました。プロジェクト1は私のワークスペース内の別のプロジェクトなので、そのクラスはJARファイルにありません。 – lowell

答えて

1

私は問題を把握しました。プロジェクト1は、プロジェクト2がビルドパスの一部として持っていないいくつかのJARに依存しています。プロジェクト1ではビルドパス内にこれらのJARが設定されていたので、それでも問題なく動作するはずです。しかし、プロジェクト1からクラスのインスタンスを作成すると、Project 2はこれらのJARを独自のビルドパスで必要としていました。

私がインスタンス化していたクラスがこれらのJARのクラスの実装/拡張であった場合、これは意味をなさないでしょうが、そうではありませんでした。

2つのJARをProject 2に追加して問題を修正しました。みんな、ありがとう。

+0

これは、eclipseのプロジェクトごとに異なるクラスローダーがあるため、自動的に共有されないためです。 jarファイルのクラスがいつ必要になるかはわかりませんが、これは非常に暗黙的なことがあります。 – mliebelt

0

Project 2クラスファイルの実行構成を設定する必要があります。

Eclipseでは、[Run As] - [Run Configuration]を右クリックし、[クラスパス]タブで、[プロジェクトの追加]をクリックして、プロジェクト1が追加されていることを確認します。

+0

実行コンフィギュレーションのクラスパスにプロジェクトを追加しても問題は解決されませんでした。私はそれが重要であれば、ブートストラップエントリではなく、ユーザエントリとして追加しました。 – lowell

0

問題を絞り込んで、JUnitの起動設定や2つのEclipseプロジェクトに関連するより一般的な問題に関連するかどうかを確認しましょう。

main(String [])メソッドを使用してProject 2でクラスを作成します。その方法では、CNFEの原因と思われる1つまたは複数のタイプのプロジェクトを参照してください。 Java Applicationの起動設定タイプを使用してこのクラスを実行します。 (私はあなたの記事から、 "JUnit Test"のLaunch Configurationタイプに基づいた起動に問題があると推測しています)。

また、JUnit 4のテストではJUnit Testの起動構成タイプを使用して面白い動作が見られましたが、完全に壊れているとは思われません。したがって、JUnit 3の設定を試すことができます。

関連する問題