部署应用程序时Weblogic Guava问题

我正在尝试将应用程序部署到weblogic服务器,我收到以下错误。
我在类路径中有guava.jar,我尝试了从10岁开始尝试的所有最新版本。 有人可以帮我解决这个问题吗?

   <Administration Console encountered the following error: weblogic.application.ModuleException: [HTTP:101216]Servlet: "action" failed to preload on startup in Web application: "...". java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor()Lcom/google/common/util/concurrent/ListeningExecutorService; at com.google.common.cache.LocalCache.(LocalCache.java:155) at com.google.common.cache.LocalCache$LocalManualCache.(LocalCache.java:4750) at com.google.common.cache.LocalCache$LocalLoadingCache.(LocalCache.java:4858) at com.google.common.cache.CacheBuilder.build(CacheBuilder.java:739) at com.my.app.servers.UserServer.(UserServer.java:42) at com.my.app.ActionServlet.setAppProperties(DesActionServlet.java:207) at com.my.app.ActionServlet.init(DesActionServlet.java:167) at javax.servlet.GenericServlet.init(GenericServlet.java:240) at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:299) at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:250) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) at weblogic.servlet.internal.StubSecurityHelper.initServletInstance(StubSecurityHelper.java:94) at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:82) at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:74) at weblogic.servlet.internal.StubLifecycleHelper.(StubLifecycleHelper.java:60) at weblogic.servlet.internal.StubLifecycleHelper.(StubLifecycleHelper.java:34) at weblogic.servlet.internal.ServletStubImpl.initStubLifecycleHelper(ServletStubImpl.java:624) at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:565) at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1874) at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1848) at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1738) at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:2740) at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1704) at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:781) at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:213) at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:208) at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:35) at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:70) at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:212) at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:111) at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124) at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:213) at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:208) at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:35) at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:70) at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:24) at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:729) at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:35) at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:258) at weblogic.application.internal.SingleModuleDeployment.activate(SingleModuleDeployment.java:48) at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165) at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79) at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:582) at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:148) at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:114) at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:335) at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:844) at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1253) at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:440) at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:163) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68) at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:545) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256) at weblogic.work.ExecuteThread.run(ExecuteThread.java:221) 

 Caused by: java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor()Lcom/google/common/util/concurrent/ListeningExecutorService; 

看起来你正在运行与你编译的不同版本的Guava。 可能你正在针对Guava的多个版本运行,并且你随机得错了。 如果您的其他依赖项之一错误地捆绑了Guava,则可能会发生这种情况。

要弄清楚MoreExecutors这个副本来自哪里,我听说你可以通过在UserServer使用这个代码段来MoreExecutors找到它:

 MoreExecutors.class.getProtectionDomain().getCodeSource().getLocation() 

这似乎是一个反复出现的问题( [1] , [2] , [3] )。 我,我自己也偶然发现了同样的问题。 Weblogic首先加载它自己的(过时的)番石榴lib版本,与你的applcation的版本相混淆。

解决方案是将prefer-application-packages添加到weblogic.xmlweblogic-application.xml

   com.google.common.*   

这是一个WAR项目吗? 或者它只是一个EJB jar?

如果是最新的,你有几个选择:

  • 将您的jar文件包装到EAR中并在其中提供Guava的jar
  • 将Guava的jar添加到AS的库文件夹中
  • 将您的jar文件与Guava的文件合并。 例如,如果你是Maven人,可以使用Maven Shade插件

我遇到了类似的问题。 我可以通过向我的EAR添加带有prefer-application-packages的weblogic-application.xml来解决这个问题。

    com.google.common.*   

我也遇到过这个问题,不幸的是,更改weblogic.xml并不适合我。 什么工作,将guava-14.0.1.jar放入$ JAVA_HOME / jre / lib / endorsed(如果它不存在则创建此目录。)

另一个警告:起初我尝试使用更新的guava-18 – 这导致了另一种兼容性问题(MapMaker.makeComputingMap上的IllegalAccessError – 这里有更多细节)。 Guava 14.0.1对我来说似乎很有用 – MapMaker类的年龄足以满足WebLogic,而MoreExecutors类足以使Cassandra Java驱动程序工作(这是我偶然发现这个问题的原因。)

我设法使用两个文件来解决这个问题:ear中的weblogic-application.xml和war中的weblogic.xml

这是earlog中的weblogic-application.xml – > src / main / application / META-INF /

    com.google.common.*   

这是warlog中的weblogic.xml – > src / main / webapp / WEB-INF /

    com.google.common.*