gpt4 book ai didi

java - OSGi bundle 无法启动 - 无法解析 sun.reflect.generics.reflectiveObjects

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:08:55 25 4
gpt4 key购买 nike

在我的 AEM 项目的代码中看似无关紧要的更改之后,我的 bundle 无法解析。检查日志后,我可以看到出现以下错误。

22.04.2015 11:00:18.650 *ERROR* [qtp1266495948-35]
org.apache.felix.http.jetty %bundles.pluginTitle:
Cannot start (org.osgi.framework.BundleException:
Unresolved constraint in bundle my-bundle
...
[caused by: Unable to resolve 401.121: missing requirement [401.121]
osgi.wiring.package; (osgi.wiring.package=sun.reflect.generics.reflectiveObjects)]]

该项目在本地编译得很好,只有当容器尝试解决它时,问题才会在 bundle 安装之后出现。

我没有在我的任何更改中添加任何显式依赖项。项目对象模型与以前相同。顾名思义,这是一个核心 Java 包,所以我希望它能被系统包公开。

我运行的是 AEM 支持的 JDK 7,所以不要指望它是 JVM 兼容性问题。至少在涉及 AEM 内部时是这样。

最佳答案

sun.reflect.generics.reflectiveObjects 包是 JDK 的一部分,但它不是 Java API 的一部分,如 Oracle's documentation for Java 7 compatibility 中所述。

The sun.* packages are not part of the supported, public interface. A Java program that directly calls into sun.* packages is not guaranteed to work on all Java-compatible platforms. In fact, such a program is not guaranteed to work even in future versions on the same platform.

这解释了为什么 AEM 底层 Apache Felix 中的 System 包不导出包。确实是一个非常合理的决定。代码在本地编译是因为包在我的类路径中,但它在运行时失败了,这一切都很好并且在意料之中。

我的代码一开始就不应该使用这个包。有两种可能的方式引入对这些包的依赖。

  1. 使用出于某种原因使用这些类的库并引入传递依赖性。事实并非如此。

  2. 导入其中一个类 - 一件非常愚蠢的事情。如果有人使用类,他们应该知道它是什么。

在我的例子中,我在没有注意到的情况下明确地从这个包中导入了一个类。

原来sun.reflect.generics.reflectiveObjects包中包含一个NotImplementedException类,其名称与常用的NotImplementedException<不谋而合 来自 apache.commons.lang3

当它在我的 IDE 中自动完成时,我不小心导入了它,很长一段时间都没有注意到这一点。我用了 git bisect 来隔离更改。

发生这种情况后,我从自动完成中排除了 sun.* 包。

关于java - OSGi bundle 无法启动 - 无法解析 sun.reflect.generics.reflectiveObjects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29865639/

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