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

标签 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.classC.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 类,具体取决于是否包含 AC进入JAR

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

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

加载它

配置文件可以包含用于创建新实例的类名。 以下代码片段假设 BC 都有一个不带任何参数的公共(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/

相关文章:

java - 如何在 fx :include? 中指定资源

java - 我们可以调试没有main方法的Java程序吗?

java - 将 Maven 性质添加到具有 pom 但没有 Maven 子菜单的现有 Eclipse 项目

java - Derby , java : Trouble with "CREATE_TYPE" statement

java - 如何在不释放父 POM 的情况下释放 Maven 子模块?

java grpc问题-java.lang.NoClassDefFoundError : io/grpc/BindableService

JAVA JPA更新相关实体

Java 帮助。如何绘制图像

java - 当我在 gui 中更新一行时,如何从数据库重新加载 Jtable 内容?

eclipse - 在可见选项卡下保留以前打开的文件选项卡