启动 Java 应用程序时出现以下错误。
我需要在启动应用程序之前将一些 hadoop 相关目录导出到类路径以使其工作(我无法跳过此步骤),并且出现以下错误。
引起原因:java.lang.LinkageError:ClassCastException:尝试强制转换jar:文件:/usr/hdp/3.0.0.0-1634/hadoop/lib/jsr311-api-1.1.1.jar!/javax/ws/rs/ext /RuntimeDelegate.class 到 jar:file:/tmp/blobStore-634df1c1-ffc8-4610-86af-8f39b33e4250/job_ac11246bea2bb31008c1a78212357514/blob_p-79f2d3193313ea987c15b4b28411db0 fc2aa436c-f858cb54126b6d546c01e5ed453bf106!/javax/ws/rs/ext/RuntimeDelegate.class 位于 javax.ws.rs .ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:146) 在 javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:120) 在 javax.ws.rs.core.UriBuilder.newInstance(UriBuilder.java:95) )在 javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119) 在 org.glassfish.jersey.client.JerseyWebTarget.(JerseyWebTarget.java:71) 在 org.glassfish.jersey.client.JerseyClient。目标(JerseyClient.java:290)在org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:76)在com.hortonworks.registries.schemaregistry.client.SchemaRegistryClient.lambda $ currentSchemaRegistryTargets $ 0(SchemaRegistryClient.java:293 )在java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)在com.hortonworks.registries.schemaregistry.client.SchemaRegistryClient.currentSchemaRegistryTargets(SchemaRegistryClient.java:293)在com.hortonworks.registries.schemaregistry.client。 SchemaRegistryClient.getSupportedSchemaProviders(SchemaRegistryClient.java:384) 在 com.hortonworks.registries.schemaregistry.client.SchemaRegistryClient.getDefaultDeserializer(SchemaRegistryClient.java:969) 在 SchemaService.InitDeserializer(SchemaService.java:47)在SchemaService.deserialize(SchemaService.java:38)在
经过一些研究,我发现程序尝试使用的类存在于两个不同的 JAR 文件中:
第一个是对我的 Maven 应用程序上的库的传递依赖 (javax.ws.rs.jar)
第二个是位于目录中的一个 jar,其中包含来自 hortonworks 的所有 hadoop 依赖项,我需要将其导出到类路径中以使应用程序正常工作 (jsr311-api-1.1.1.jar)
因此,我需要以某种方式告诉程序,应该使用打包在我的应用程序的 jar 中的 maven 依赖项,而不是位于类路径上的 jar。(javax.ws.rs.jar) 而不删除此 jar,因为它是一部分我的大数据集群安装,我无法使用类路径中的那些罐子。
有什么想法吗?
潇湘沐
弑天下
相关分类