几天前,我尝试解决这个问题SO-Question 。
我了解静态初始化器以及 java
中的好处。但由于这个问题,我在想如果它们引用 jar 之外的类,它们是否可能是错误的设计决策。
这个问题发生了什么?
用户尝试在其环境中使用CXF
,但失败 -
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.cxf.common.injection.ResourceInjector
这个问题对我来说非常可疑,所以我要求他添加一个示例,并且我尝试调试他的示例,但是每次在 Eclipse 中,当我在加载 ResourceInjector
的代码处时,我最终得到了 MethodIn Vocation
... 异常。我不明白这个问题。
然后,另一位用户指出cxf
类中有一个静态初始化器:
static {
ANNOTATIONS.add(Resource.class);
ANNOTATIONS.add(Resources.class);
}
Resource(s).class来自javax.annotation包,在环境中找不到。
我认为找到这个问题的问题有点困难,而且我也认为大多数开发者都会遇到问题(包括我)。
引用其他 jar 的静态初始化器是一个糟糕的设计决策吗?
最佳答案
我认为您正在解决错误的问题。这里要解决的问题是,为什么你错过了依赖项?
可以在静态初始化程序中使用另一个 jar 中的类,但是您需要确保打包项目中所需的所有内容。
如果您使用maven进行打包,则永远不会遇到这样的问题。
关于java - 引用其他 jar 的静态初始化器是否是一个糟糕的设计决策?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28872891/