java.lang.NoSuchFieldError:INSTANCE

当我试图通过StormSubmitter提交我的拓扑时,我得到了 –

Caused by: java.lang.NoSuchFieldError: INSTANCE at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.(DefaultHttpRequestWriterFactory.java:52) 

我正在使用Spring。

我没有在Spout / Bolt构造函数中初始化HttpClient。 相反,它是在一个类的构造函数中初始化的,该类是在bolt的prepare()方法中从Spring Context获取的

代码结构如下 –

SomeBolt.java

 @Component public class SomeBolt extends BaseRichBolt { private OutputCollector _collector; private SomeClient someClient; @Override public void prepare(Map conf, TopologyContext context, OutputCollector collector) { _collector = collector; someClient = AppContext.getBean(SomeClient.class); } } 

SomeClient.java

 @Component public class SomeClient { private final CloseableHttpClient httpClient; public SomeClient() { this.httpClient = (httpClient == null ? HttpClients.createDefault() : httpClient); } } 

AppContext.java

 @Component public class AppContext implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { AppContext.applicationContext = applicationContext; } public static  T getBean(Class c) { return applicationContext.getBean(c); } } 

这可能是一个依赖问题。

这是一个非常不清楚的错误消息,但我发现类似的东西: Hibernate NoSuchFieldError INSTANCE但只有Struts 1?

我遇到类似这样的问题,在我的类路径中有两个jar包含相同的类,httpcore-4.3和apache-httpcomponents-httpcore,我已经从类路径中删除了apache-httpcomponents-httpcore解决了这个问题。

苛刻是风暴阶级的正确道路。

所以我做的工作是删除风暴附带的httpclient和httpcore,并分别用更新版本4.3.3和4.3.2替换它们。 这会更改works / nimbus / supervisor用于启动的类路径。 您可以运行storm classpath并打印出类路径。

 [nimbus ~]$ storm classpath ...../storm-0.8.2/lib/httpclient-4.3.3.jar:..../storm-0.8.2/lib/httpcore-4.3.2.jar..... 

我不确定这是一个非常好的工作,我不确定风暴的哪个部分使用这个jar子。

如果你看一下python 风暴代码,你会发现它会将所有的jar放在风暴根和storm / lib中

 def get_classpath(extrajars): ret = get_jars_full(STORM_DIR) ret.extend(get_jars_full(STORM_DIR + "/lib")) ret.extend(extrajars) return normclasspath(":".join(ret)) 

我在插件文件夹中的路径中有以下jar文件:
./var/lib/jenkins/plugins/build-pipeline-plugin/WEB-INF/lib/httpcore-4.2.1.jar
./var/lib/jenkins/plugins/git-client/WEB-INF/lib/httpcore-4.3.2.jar
./var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/httpcore-4.2.4.jar

之后,我删除了下面的文件,它对我有用
/var/lib/jenkins/plugins/build-pipeline-plugin/WEB-INF/lib/httpcore-4.2.1.jar