【问题标题】:Cyclic dependency preventing war deployment on Tomcat循环依赖阻止 Tomcat 上的战争部署
【发布时间】:2019-09-09 22:39:54
【问题描述】:

我使用 Jersey 进行了一场休息服务战争(将调用 A),它在本地以及多个测试 Tomcat 服务器上部署,但无法在 3 个 ~prod 服务器中的 1 个服务器上加载。我相信这是处理注释时的循环依赖。服务器上的另一场战争 B 无处不在。在服务器 A 上失败,如果 B 被删除,A 将工作。这是通过随机试验和错误发现的。除了看起来战争文件以不同的顺序出现之外,服务器设置是相同的。我一直在研究如何强制以特定顺序处理 jar 文件中的注释以消除任何伪随机性。我正要发布一个关于 .甚至没有意识到这是否是订购罐子的正确方法,我很深。所以我想我首先可能会得到关于我前进方向的意见。

18-Apr-2019 07:43:42.886 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/opt/tomcat/webapps/[A].war]
18-Apr-2019 07:43:43.337 SEVERE [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/[A].war]]
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
                at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
                at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
                at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:985)
                at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/[A]] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies. The class hierarchy being processed was [oracle.net.aso.d->oracle.net.aso.e->java.lang.Object->java.lang.Object->java.lang.Object->java.lang.Object->
.
.
.
java.lang.Object->java.lang.Object->java.lang.Object->java.lang.Object]
                at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2100)
                at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2044)
                at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1990)
                at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1960)
                at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1913)
                at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1153)
                at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:765)
                at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
                at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5154)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
                ... 10 more

【问题讨论】:

  • 我们遇到了同样的问题。你曾经能够修复它吗?是否有多个版本的 Oracle 驱动程序?
  • 我不记得具体的文件或版本。我有两个具有冲突子依赖项的依赖项。构建的战争中有两个版本的同一个库,并且首先加载旧版本我把它的新版本放在我的项目 pom.xml 中。这解决了问题

标签: java tomcat annotations jersey circular-dependency


【解决方案1】:
oracle.net.aso.d->oracle.net.aso.e->java.lang.Object->java.lang.Object->java.lang.Object
  1. 查看消息,它会扫描单个 jar 中的类并进入java.lang.Object 的循环。这很奇怪。 (如果它可以用最新版本的 Tomcat 重现,例如只有该 jar 文件的空 Web 应用程序,请提交问题)。

  2. 从注释扫描中跳过文件相当容易。这在“如何使 Tomcat 启动更快”下的 Apache Tomcat 常见问题页面上有记录。

请注意,您没有提及您使用的 Apache Tomcat (x.y.z) 版本。

【讨论】:

    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    相关资源
    最近更新 更多