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 构建中轻松配置两个单独的 JAR。第一个应该B.class包含和C.class排除并且编码为A a = new B();第二个应该C.class包含和B.class排除并且编码为A a = new C();

我对 Ant 和 Maven 知之甚少。在这种情况下我需要使用它们吗?

也许,我的设计有问题,如果是这样,请告诉我。

4

3 回答 3

2

您想要的主要是代码加载问题,而不是 Ant 问题。

只是您为创建新类实例而提出的两个语句:

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

使用静态代码调用构造函数。Ant 无法更改代码,因此我看到的唯一使用 Ant 的方法是使用 Ant 生成 Factory 类作为构建过程的一部分,具体取决于JAR 中是否包含A或包含C

但这会导致项目不能再直接在 Eclipse 中使用,因为 Eclipse 项目中的原始源代码缺少因子类。

恕我直言,更好的方法是动态类加载(可以与反射结合使用)。您可以自动搜索扩展的类,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 回答