我的项目中有更多类,但现在请仅考虑 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的了解不多。在这种情况下我需要使用它们吗?
也许我的设计有问题,如果有,请告诉我。
最佳答案
你想要的主要是代码加载问题,而不是Ant问题。
只是您为创建新类实例而提出的两个语句:
A a = new B();
A a = new C();
使用静态代码调用构造函数。 Ant 无法更改代码,因此我看到的 Ant 的唯一方法是在构建过程中使用 Ant 生成 Factory 类,具体取决于是否包含 A
或 C
进入JAR
但这将导致项目无法再直接在 Eclipse 中使用,因为 Eclipse 项目中的原始源代码缺少因子类。
恕我直言,更好的方法是动态类加载(可以与反射结合)。您可以自动搜索扩展 A
的类,或者将配置文件/信息添加到 JAR 中指定要创建的类(例如属性文件)。
将属性文件与 Java 文件一起放在 src 文件夹中,并通过 this.getClass().getResource("myclass.config");
配置文件可以包含用于创建新实例的类名。
以下代码片段假设 B
和 C
都有一个不带任何参数的公共(public)构造函数:
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();
关于java - 如何使用 Eclipse 从相同代码自动构建不同的 JAR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13722662/