我在项目中有更多的课程,但现在请只考虑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
,代码为{{1第二个应该包含A a = new B();
并排除C.class
,代码为B.class
我不知道很多关于Ant和Maven的事情。在这种情况下我需要使用它们吗?
也许,我的设计有问题,如果是的话,请告诉我。
答案 0 :(得分: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();
答案 1 :(得分:1)
在您的日食中,如果您右键单击项目,您将有一个选项Export
单击它,然后选择jar,然后命名jar,在其中选择所需的类。
对另一个罐子重复这个。
检查此http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftasks-33.htm
答案 2 :(得分:0)
最简单的方法是在Eclipse中拥有3个独立的Java项目。根据你的例子,那将是
Eclipse允许您在构建路径中引用项目中另一个项目的bin目录。
然后您可以将B和C项目导出(或使用Ant)作为单独的项目。