gpt4 book ai didi

java - OpenJDK 11.0.4 在类路径中有 java-atk-wrapper.jar

转载 作者:行者123 更新时间:2023-12-02 09:27:29 26 4
gpt4 key购买 nike

我在尝试通过 class.getResource("/META-INF/MANIFEST.MF") 从应用程序的 .jar 文件加载 MANIFEST.MF 时注意到了这个问题。

list 似乎是从 /usr/share/java/java-atk-wrapper.jar 加载的,而不是获取我自己的 list 。但是,这个 jar 没有指定为我的应用程序类路径的一部分 - 我尝试禁用 java 可访问性辅助技术 ( here ),但这没有效果。

有趣的是,此行为特定于 OpenJDK-11.0.4。使用 11.0.3 时不会出现此问题。谁能解释一下这里可能发生的事情吗? java 内部 jars/类的加载/访问方式是否有某种变化?或者这可能只是 11.0.4 中引入的错误?

最小工作示例:

import java.net.URL;

public class Main {
public static void main(String[] args) {
final URL resource = Main.class.getResource("/META-INF/MANIFEST.MF");
System.out.println(resource.getPath());
}
}

然后运行:

$ java --version
openjdk 11.0.4 2019-07-16
OpenJDK Runtime Environment (build 11.0.4+11-post-Ubuntu-116.04.1)
OpenJDK 64-Bit Server VM (build 11.0.4+11-post-Ubuntu-116.04.1, mixed mode, sharing)
$ javac Main.java
$ java Main
file:/usr/share/java/java-atk-wrapper.jar!/META-INF/MANIFEST.MF
$ echo $CLASSPATH

$

此代码片段的expexted行为将引发NPE,因为没有 list 资源。相反, list 是从 atk-wrapper 加载的。

环境详细信息:

Ubuntu 16.04.5 LTS

OpenJDK 是通过 apt 全新安装的

add-apt-repository ppa:openjdk-r/ppa
apt install openjdk-11-jdk

apk 包装器显式安装。直到我们的一台机器上出现这个问题,我才意识到它的存在 - 此时我也能够在我的本地机器上重现它。

最佳答案

当我尝试在 Fedora 29 上使用 OpenJDK Java 11.0.4 重现此问题时,我得到了 NPE。

$ javac Main.java 
$ java Main
Exception in thread "main" java.lang.NullPointerException
at Main.main(Main.java:6)
$ java -version
openjdk version "11.0.4" 2019-07-16
OpenJDK Runtime Environment 18.9 (build 11.0.4+11)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.4+11, mixed mode, sharing)
$ echo $CLASSPATH

$

然后我试图找到java-atk-wrapper.jar。不在那里。所以我通过包管理器安装了它,然后再次运行你的程序。

仍然是 NPE1

嗯。

结论:您安装的 OpenJDK Java 11.0.4 有一些奇怪的地方,但这不是 OpenJDK 本身的错误。

请注意,以下 OpenJDK 错误报告与此相关:

这似乎是在说 OpenJDK 团队不支持/维护该 JAR 文件中的内容。

<小时/>

更新

鉴于您添加到问题中的额外信息,该问题似乎是 Debian/Ubuntu 的 OpenJDK 软件包中的错误。我发现这个 Debian bug 似乎与之相关:

我怀疑他们修复原始错误(“辅助功能未加载”)的尝试引入了这种回归。

我给你的建议是:

  1. 提出 Ubuntu/Debian 的新问题。让他们决定是否需要向上游提出这个问题,或者这是否是他们需要解决的问题。

  2. 如果您想尝试一种巧妙的解决方法,请看看重命名 java-atk-wrapper.jar 以使启动程序找不到它会发生什么。它可能有效。

  3. 或者(不那么麻烦),查看 JAR 文件来自系统上的哪个 Ubuntu 软件包。如果有意义,请卸载该软件包以及依赖于它的任何内容。

<小时/>

1 - NPE 发生是因为 getResource 返回 null ...因为类加载器找不到 list 资源。这就是应该发生的事情。

关于java - OpenJDK 11.0.4 在类路径中有 java-atk-wrapper.jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58236241/

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