java - 引用其他 jar 的静态初始化器是否是一个糟糕的设计决策?

标签 java classloader

几天前,我尝试解决这个问题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/

相关文章:

java - Spring Filter中的AbstractMethodError org.hibernate.ejb.HibernatePersistence.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;

java - 如何从网站获取非拉丁字符?

java - MQ - 获取多实例 MQ 管理器连接列表

java - Bazel:FlywayDB java.lang.UnsupportedClassVersionError

java - 在 Jetty 中使用系统类加载器加载外部 jar

Java split() 返回一个空的第一个元素

JavaFX2.2(稳定)忽略 "socksProxyHost"和 "socksProxyPort"的设置属性?

tomcat - apache tomcat DataSourceFactory 中不受支持的 major.minor 版本 51.0

java - 动态修改类路径

java - 从Java中的类路径读取配置文件,默认在JAR中