由于不需要的 spring jar,外部 tomcat 中的 spring-boot war 启动出现问题

问题描述 投票:0回答:1

我正在尝试在外部 tomcat 中运行 spring-boot web 应用程序 war 文件,其中许多其他应用程序(Spring 而不是 spring-boot)已经在运行。在同一服务器上的某些共享位置存在一些依赖项,这些依赖项在运行时加载到应用程序中,并在 catalina.properties 文件 common.loader 中配置

在盯着我的 spring-boot 应用程序时,我收到以下错误:

        java.lang.IllegalStateException: Error starting child
                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:686)
                at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658)
                at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:661)
                at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1023)
                at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1910)
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
                at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
                at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:824)
                at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
                at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1617)
                at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:318)
                at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:114)
                at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
                at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:345)
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:893)
                at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:794)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
                at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)
                at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:248)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:921)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.startup.Catalina.start(Catalina.java:772)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:498)
                at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347)
                at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478)
        Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/myservice]]
                at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:419)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:186)
                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683)
                ... 37 more
        Caused by: org.springframework.cglib.core.CodeGenerationException: java.lang.NoSuchMethodException-->org.springframework.ws.config.annotation.DelegatingWsConfiguration$$EnhancerBySpringCGLIB$$47de5974.CGLIB$SET_THREAD_CALLBACKS([Lorg.springframework.cglib.proxy.Callback;)
                at org.springframework.cglib.proxy.Enhancer$EnhancerFactoryData.<init>(Enhancer.java:513)
                at org.springframework.cglib.proxy.Enhancer.wrapCachedClass(Enhancer.java:806)
                at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:111)
                at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:108)
                at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61)
                at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34)
                at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:134)
                at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:319)
                at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:572)
                at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:419)
                at org.springframework.context.annotation.ConfigurationClassEnhancer.createClass(ConfigurationClassEnhancer.java:137)
                at org.springframework.context.annotation.ConfigurationClassEnhancer.enhance(ConfigurationClassEnhancer.java:109)
                at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:447)
                at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:268)
                at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:325)
                at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:147)
                at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:748)
                at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564)
                at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
                at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731)
                at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
                at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
                at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:175)
                at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:155)
                at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:97)
                at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:174)
                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4904)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                ... 38 more
        Caused by: java.lang.NoSuchMethodException: org.springframework.ws.config.annotation.DelegatingWsConfiguration$$EnhancerBySpringCGLIB$$47de5974.CGLIB$SET_THREAD_CALLBACKS([Lorg.springframework.cglib.proxy.Callback;)
                at java.lang.Class.getDeclaredMethod(Class.java:2130)
                at org.springframework.cglib.proxy.Enhancer.getCallbacksSetter(Enhancer.java:912)
                at org.springframework.cglib.proxy.Enhancer.access$000(Enhancer.java:93)
                at org.springframework.cglib.proxy.Enhancer$EnhancerFactoryData.<init>(Enhancer.java:502)
                ... 67 more

经过一番调查,我发现此错误是由于 spring-ws-core jar 来自共享位置而出现的。在我的应用程序中,这个罐子从未包含或需要。如果我从共享位置删除此 jar,那么我不会收到此错误,但其他应用程序需要此 jar,因此我无法从共享位置删除它。

有什么方法可以不加载此特定应用程序的某些共享位置特定的 jar。

如有任何帮助,我们将不胜感激!

java spring spring-boot maven tomcat
1个回答
0
投票

对于任何面临类似问题的人,我能够通过在项目 pom 文件中添加导致问题的 jar 的依赖项(例如 spring-ws-core 和我的例子中的一些 jackson jar)来解决此问题,而无需指定任何版本,例如下面。

<dependency>
    <groupId>org.springframework.ws</groupId>
    <artifactId>spring-ws-core</artifactId>
</dependency>

这样,正确版本所需的 jar 就下载到了我项目的 WEB-INF/lib 中,并且它不是引用共享库 jar 文件(通过 catalina.properties common.loader 定义)。 我仍然不确定为什么我的项目需要这些依赖项,因为如果没有这些依赖项,它在我的本地 tomcat 上运行良好。

© www.soinside.com 2019 - 2024. All rights reserved.