2

プロジェクトにはもっとたくさんのクラスがありますが、今のところA、B、Cクラスのみを検討してください。

abstract public class A {...}

public class B extends A {...}

public class C extends A {...}

その後、私はこのようなコードをクラスDに持っています

A a = new B();
//A a = new C();

//use a's methods

ですから、私の質問は、Eclipseで2つの別々のJARを簡単に構成する方法です。最初のものはB.class含まれ、C.class除外され、コード化されている必要がありますA a = new B();2番目のものはC.class含まれ、B.class除外され、コード化されている必要がありますA a = new C();

AntとMavenについてはあまり知りません。この場合、それらを使用する必要がありますか?

たぶん、私のデザインに何か問題があります。もしそうなら、私に知らせてください。

4

3 に答える 3

2

あなたがしたいのは、Antの問題ではなく、主にコードのロードの問題です。

新しいクラスインスタンスを作成するために提示した2つのステートメントだけです。

A a = new B(); 
A a = new C();

コンストラクターは静的コードを使用して呼び出されます。Antはコードを変更できないため、Antを使用する唯一の方法は、ビルドプロセスの一部としてAntを使用してFactoryクラスを生成することです。これは、またはがJARに含まれているかどうAかによって異なります。C

ただし、Eclipseプロジェクトの元のソースコードにfactorクラスがないため、Eclipseで直接使用できなくなったプロジェクトになります。

IMHOのより良いアプローチは、動的なクラスの読み込みです(リフレクションと組み合わせることができます)。拡張するクラスを自動的に検索するAか、作成するクラス(プロパティファイルなど)を指定する構成ファイル/情報をJARに追加できます。プロパティファイルをJavaファイルとともにsrcフォルダーに配置し、を介してロードします。this.getClass().getResource("myclass.config");

構成ファイルには、新しいインスタンスの作成に使用する必要のあるクラス名を含めることができます。切り取られた次のコードは、引数をとらないパブリックコンストラクターが両方にあることBを前提としています。C

String classNameToLoad = ... // loaded from config file example "mypackage.B"
final Class<?> c = Class.forName(classNameToLoad);
final Class<? extends A> ac = c.asSubclass(A.class);
final Constructor<? extends A> a_ctor =  ac.getConstructor();
final A a = a_ctor.newInstance();
于 2012-12-05T12:14:23.907 に答える
1

Eclipseでは、プロジェクトを右クリックすると、オプションが表示されますExport 。それをクリックしてjarを選択し、jarに名前を付けて、必要なクラスを選択します。他の瓶についてもこれを繰り返します。

これを確認してくださいhttp://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftasks-33.htm

于 2012-12-05T11:55:01.223 に答える
0

これを行う最も簡単な方法は、Eclipseに3つの別々のJavaプロジェクトを用意することです。あなたの例に基づいて、それは

  • Bコードプロジェクト
  • Cコードプロジェクト
  • 一般的なコード

Eclipseでは、ビルドパス内のプロジェクトから別のプロジェクトのbinディレクトリを参照できます。

次に、BプロジェクトとCプロジェクトを別々のプロジェクトとしてエクスポート(またはAntを使用)できます。

于 2012-12-05T13:55:25.680 に答える