2012-03-14 8 views
-1

別のプロジェクト内にあるクラスをロードしたいと思います。私のパッケージの構造以下、myMethodB内のプロジェクト等:Javaでクラスをロードする

--ProjectA 
    --package myPackageA 
    --myClassA 

--ProjectB 
    --package myPackageB 
    --myClassB 
     --myMethodB 

は、私がPROJECTAからクラス「myClassA」をロードします。 私はProjectB内にあったクラスをロードする方法を知っていますが、現在の構造でクラスを参照する方法がわかりません。

私がこれまで持っている唯一のものは以下の通りです:要するに

Class<?> c = thread.currentThread().getContextClassLoader().loadClass("location_of_myClassA"); 

:私の代わりに「location_of_myClassA」の何を書くのですか?

+0

これは、何かをするには間違った道のような多くのにおいがします。あなたは何をしようとしていますか、厳密に言えば、これは意味がありますか? –

+0

実際、私は別のプロジェクトのパッケージでクラスを参照する方法を知りたがっていましたが、これを行う方法を尋ねるのが最善の方法でした。 :) – deimos1988

+1

"別のプロジェクト"はIDEの外では意味がありません。 –

答えて

4

クラスローダは、それらの両方を知っているならば、あなたはだけは完全修飾クラス名を与える必要があります。

...loadClass("myPackageA.myClassA") 

ClassLoader.loadClassは、「場所」を与えられている必要はありません - それはの一部ですどのように(たとえば、特定のjarファイルまたはjarファイルのセットを指すように)で初期化されています。

+0

うわー、それは簡単だろうとは思わなかった。非常にありがとう、それは働いた! – deimos1988

-1

あなたはいつもPROJECTAをジャーにJARMakerを使用して試してみて、Eclipse用のProjectBの

0

にライブラリとしてそれを使用する、

Right Click Project -> Build Path -> Configure Build Path -> Project References 

あなたはNetbeansのため

を参照したいプロジェクトを選択し、

することができます
Right Click Project -> Properties -> Libraries -> Add Project(Compile Tab) 

プロジェクトを選択してください。

0

限り、すべての.classファイル(またはクラスパス内の.jarファイルで)あなたのクラスパスにあるように、あなたは何もする必要はありませんが、:もちろん

Class<?> c = Class.forName(classname); 

これはデフォルトを使用していますシステムクラスローダー(jvmの "java.class.path"設定、つまりJava実行ファイルの "-cp"引数によって制御されます)。典型的なコマンドラインアプリケーションで

// within an instance method 
Class<?> c = getClass().getClassLoader().loadClass(classname) 

// within some other object (other than SomeClass), or a static method: 
Class<?> c = SomeClass.class.getClassLoader().loadClass(classname); 

、これらのすべての3は、基本的に次のようになります。別にあなたが上記のようにコンテキストクラスローダを使用するか、または他のいくつかの特定のクラスをロードした同じクラスローダを使用することができることから、

(システムがクラスローダーを明示的に置き換えていない限り)システムクラスローダーのみが存在するため同じです。しかし、Webアプリケーションでは、サーブレットコンテナは通常、各Webアプリケーションのクラスパスを別々に保つためのカスタマイズされたクラスローダーを提供します。したがって、どちらを呼びたいかに違いがあります(ここでは具体的な内容はわかりません)。

これらのうちの1つを呼び出すことができない場合は、ロードしようとしているクラスがクラスパスエントリの1つに含まれていないことを意味します。おそらくIDEセットアップです(おそらく、 aをプロジェクトbのクラスパスにする)、またはあなたのmaven setup(プロジェクトbのプロジェクトaに依存関係を定義していない)

関連する問題