Java 如何使用Eclipse从同一代码自动构建不同的JAR? 我在项目中有更多的课程,但现在只考虑A、B和C类。 abstract public class A {...} public class B extends A {...} public class C extends A {...}
然后我有一个代码,比如在D类中,像这样Java 如何使用Eclipse从同一代码自动构建不同的JAR? 我在项目中有更多的课程,但现在只考虑A、B和C类。 abstract public class A {...} public class B extends A {...} public class C extends A {...},java,eclipse,maven,inheritance,ant,Java,Eclipse,Maven,Inheritance,Ant,然后我有一个代码,比如在D类中,像这样 A a = new B(); //A a = new C(); //use a's methods 因此,我现在的问题是如何在Eclipse构建中轻松配置两个独立的jar。第一个jar应该包含B.class和C.class并作为A=new B()编码第二个应包含C.class和B.class并将代码作为A=new C() 我对Ant和Maven了解不多。我需要在这种情况下使用它们吗 也许,我的设计有问题,如果有,请告诉我。在eclipse中,如果右键单
A a = new B();
//A a = new C();
//use a's methods
因此,我现在的问题是如何在Eclipse构建中轻松配置两个独立的jar。第一个jar应该包含B.class
和C.class
并作为A=new B()编码代码>第二个应包含C.class
和B.class
并将代码作为A=new C()代码>
我对Ant和Maven了解不多。我需要在这种情况下使用它们吗
也许,我的设计有问题,如果有,请告诉我。在eclipse中,如果右键单击项目,您将有一个选项导出
单击它,选择jar,然后命名jar,选择您想要的类。
对另一个罐子重复这个步骤
选中此复选框,您想要解决的主要是代码加载问题,而不是Ant问题
仅介绍创建新类实例时使用的两条语句:
A a = new B();
A a = new C();
构造函数是使用静态代码调用的。Ant无法更改代码,因此我看到的使用Ant的唯一方法是在构建过程中使用Ant生成工厂类,这取决于JAR中是否包含a
或C
但这将导致一个项目不能再直接在Eclipse中使用,因为Eclipse项目中的原始源代码丢失了factor类
更好的方法是动态类加载(可以与反射相结合)。您可以自动搜索扩展A
的类,或者向JAR添加配置文件/info,指定要创建的类(例如属性文件)。
将属性文件与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();
String classNameToLoad=…//从配置文件示例“mypackage.B”加载
最终c类=Class.forName(classNameToLoad);
最后一个类实现这一点的最简单方法是在Eclipse中有3个独立的Java项目。根据你的例子,那将是
- B代码项目
- C代码项目
- 通用代码
Eclipse允许您在构建路径中引用项目中另一个项目的bin目录
然后可以将B和C项目作为单独的项目导出(或使用Ant) 我想说你需要一个ant
任务。@SJuan76,代码如何aaa=newb/C()代码>?我确实忽略了这一点。我想说你应该使用CDI,但这意味着你的程序会发生变化。@SJuan76,这种情况不是很常见吗?欢迎您发布关于CDI使用的答案。顺便说一句,这是一个模棱两可的问题。CDI是一个有很多选择的复杂主题。要使其简单和肮脏,请在.properties文件中输入要使用的类的名称(ant
可以这样做),以实例化读取该文件的类,并使用反射创建实例。我希望自动执行此操作。我使用Export-Executable Jar,因为类没有选择。你看到你的项目了吗?打开它,在左边选择一个“+”,然后转到构建路径,选择你的类请检查步骤的引用在Eclipse导出中有两个选项“Jar”和Executable Jar
。我使用第二个,在那里你不能选择类。另外,如果您需要自动地手动加载,那么将非常繁琐。如果我采用动态类加载的方法,您将需要ANT,因为Eclipse和Jar可以使用相同的代码吗?是的,因为代码本身根据配置文件决定加载哪个类在Eclipse中也可以工作。只有MANIFEST.MF中的配置将不起作用,因为类文件不在JAR文件中。另请参阅我的更新答案。我在动态类加载和反射方面非常差。你能用更多的代码、说明或相关材料在答案中详细说明一下吗?因此,我会接受你的答案,因为这是迄今为止最好的答案。谢谢