如何使用Eclipse从相同的代码自动构建不同的JAR?

时间:2012-12-05 11:51:41

标签: java eclipse maven inheritance ant

我在项目中有更多的课程,但现在请只考虑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的事情。在这种情况下我需要使用它们吗?

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

3 个答案:

答案 0 :(得分:2)

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

您提供的两个用于创建新类实例的语句:

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

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

但这会导致项目无法再直接在Eclipse中使用,因为Eclipse项目中的原始源代码错过了因子类。

恕我直言更好的方法是动态类加载(可以与反射结合)。您可以自动搜索扩展A的类,或者向JAR添加配置文件/信息,指定要创建的类(例如属性文件)。 将属性文件放在带有Java文件的src文件夹中,然后通过this.getClass().getResource("myclass.config");

加载它

配置文件可以包含应该用于创建新实例的类名。 以下代码段落假定BC都有一个不带任何参数的公共构造函数:

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项目。根据你的例子,那将是

  • B代码项目
  • C代码项目
  • 常用代码

Eclipse允许您在构建路径中引用项目中另一个项目的bin目录。

然后您可以将B和C项目导出(或使用Ant)作为单独的项目。