gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:20:49 24 4
gpt4 key购买 nike

我在项目中有更多类,但现在请只考虑 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 类,具体取决于 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com