gpt4 book ai didi

Java:项目中的两个 jar 具有相同的类。

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:28:24 26 4
gpt4 key购买 nike

我有一个 java 项目,它使用两个具有相同类 (com.sun.mail.imap.IMAPFolder) 的导入 jar。有没有办法在导入类时明确说明要使用哪个 jar?使用:

import com.sun.mail.imap.IMAPFolder; 

似乎会按照构建路径的顺序使用该类,但由于某些原因似乎并非如此

Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.NoSuchMethodError: com.sun.mail.imap.IMAPFolder.idle()V
at com.woodbury.GCM.HelperGmailMonitor.doEmail(HelperGmailMonitor.java:104)
at com.woodbury.GCM.Launch.listen(Launch.java:16)
at com.woodbury.GCM.Launch.main(Launch.java:10)
... 5 more

在运行时。我正在 eclipse 中构建项目。

最佳答案

当一个类被加载时,第一个与相关ClassLoader 可见的请求的完全限定名称匹配的实现将被返回。具有相同完全限定名称的任何其他实现都有效地隐藏到该 ClassLoader

这在标准的 Java SE 应用程序中意味着第一个代码库(即 jar)在类路径中列出并提供所需的类,并且隐藏所有其他代码库的相同完全限定类的实现.

示例:

假设A.jar中包含编译后的类

package com.stackoverflow.example;
public class Hello {
public static String getGreeting(){
return "Hello, A!"
}
}

假设B.jar包含编译后的类

package com.stackoverflow.example
public class Hello {
public static String getGreeting(){
return "Hello, B!"
}
}

请注意,在上述两个类中具有相同的完全限定名称。

假设主类是

   import com.stackoverflow.example.Hello;

public class ExampleMain {
public static void main(String[] args){
System.out.println(Hello.getGreeting());
}
}

如果我要调用我的程序

java -cp A.jar:B.jar ExampleMain

输出是:Hello, A!

如果我像这样反转类路径

java -cp B.jar:A.jar ExampleMain

输出是:你好,B!

关于Java:项目中的两个 jar 具有相同的类。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19339670/

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