我有一个maven项目,它依赖于版本为“2.0”的jar“sample”。 版本“2.0”的“样本”jar包含一个名为“SampleEnum”的Enum。 的SampleEnum在“2.0”版本看起来如下如何在java maven项目中从两个不同版本的jar中加载两个版本的类?
public enum SampleEnum {
"HERBIVORES",
"CARNIVORES",
"OMNIVORES"
}
我想从在上面提到的行家java项目的版本“1.0”“样品”罐子加载“SampleEnum”级。 “1.0”版本的SampleEnum类看起来如下所示。
public enum SampleEnum {
"HERBIVORES",
"CARNIVORES"
}
我用下面的代码加载类:
public class Test
{
public static void main(String args[]) {
try {
URLClassLoader loader1 = new URLClassLoader(new URL[] {new File("sample-1.0.jar").toURL()}, Thread.currentThread().getContextClassLoader());
Class<?> c1 = loader1.loadClass("SampleEnum");
for (Object o : c1.getEnumConstants()) {
System.out.println(o);
}
}
catch(Exception ex)
{
System.err.println(ex.getMessage());
}
}
}
上述程序的实际输出是:
食草动物 食肉动物 杂食性
正如我已加载来自“sample-1.0”jar的类我期望以下输出:
HERBIVORES CARNIVORES
我可以知道它为什么从相关jar而不是指定jar加载类的原因吗?
是否有任何方式来加载maven项目中的版本1.0 jar中的枚举类?
使用上面的代码,我得到了以下异常。线程“main”中的异常java.lang.NoClassDefFoundError:java/lang/Object – user3351074
引起来自:java.lang.ClassNotFoundException:java.lang.Object \t at java.net.URLClassLoader.findClass(URLClassLoader.java:381) \t at CustomURLClassLoader.loadClass(CustomURLClassLoader.java:22) \t at java.lang.ClassLoader.loadClass(ClassLoader。java:357) – user3351074
我在代码中看不到那个错误。我已更新我的示例,以显示我正在运行的内容。 –