我在两个不同的 jar1 和 jar2 中有一个 Client.java 类 现在在运行时我想决定加载哪个 Client.class
if (country==india){
// load Client class of jar1
) else{
load client class from jar2
}
我可以这样做吗...
最佳答案
如果这 2 个类具有相同的包名称,即 com.mycompany.Client,那么您最终会遇到加载哪个版本的 Client 有点随意的情况。它归结为首先在类路径上。这是一个 JAR hell 情况 http://en.wikipedia.org/wiki/Java_Classloader#JAR_hell .
这是一个很好的避免情况,但如果你绝对必须有同一个类的不同版本,有办法做到这一点。一种方法是使用自定义类加载器,类加载器将知道您需要执行哪个版本。这不是一件微不足道的事情,而且可能难以管理。 OSGi 框架是帮助管理这个的替代方案(它在后台使用自定义类加载器),但如果你只有一个类实例,我不会使用它,因为它是另一个框架,需要时间和维护。
底线:尽可能避免这种情况,如果不能则选择阻力最小的路径。
如果类确实有不同的包名,@Casidiablo 已经提供了一个很好的答案。
关于java - 如何从不同的 jar 加载相同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2854056/