首页 > 解决方案 > 从 java 8 迁移到 11 - jaxws-rt

问题描述

我已经从 Java 8 迁移到 Java 11,我发现一些 Java EE 库已被弃用,我不得不使用一些第三方依赖项。

所以我已经将这些依赖项添加到 maven pom.xml

<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
</dependency>
<!-- JAXWS for Java 11 -->
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>${com.sun.xml.ws.jaxws-rt.version}</version>
    <type>pom</type>
</dependency>
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>rt</artifactId>
    <version>${com.sun.xml.ws.jaxws-rt.version}</version>
</dependency>

变量中的版本在哪里2.3.2. 但是当我开始构建时,有很多这样的警告

java.io.IOException:在 org.apache.tomcat.util.scan.JarFileUrlJar.(JarFileUrlJar. java:65) at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:49) at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:374) at org.apache .tomcat.util.scan.StandardJarScanner.processURLs(StandardJarScanner.java:309) 在 org.apache.tomcat.util.scan.StandardJarScanner.doScanClassPath(StandardJarScanner.java:278) 在 org.apache.tomcat.util.scan.StandardJarScanner .scan(StandardJarScanner.java:229) 在 org.apache.jasper.servlet.TldScanner.scanJars(TldScanner.java:262) 在 org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:104) 在 org. apache.jasper。servlet.JasperInitializer.onStartup(JasperInitializer.java:83) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5135) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374) 在 java.base/java.util .concurrent.FutureTask.run(FutureTask.java:264) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService .java:140) 在 org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) 在 org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:第 841 章.ContainerBase$StartChild.call(ContainerBase.java:1374) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService .java:75) 在 java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140) 在 org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) 在 org.apache。 catalina.core.StandardEngine.startInternal(StandardEngine.java:262) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) 在 org.apache.catalina.core.StandardService。startInternal(StandardService.java:421) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930) at org.apache .catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.startup.Tomcat.start(Tomcat.java:459) at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize (TomcatWebServer.java:107) 在 org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:88) 在 org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java: 438) 在 org.springframework 的 org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:191)。boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:180) 在 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:153) 在 org.springframework.context.support。 AbstractApplicationContext.refresh(AbstractApplicationContext.java:544) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:315) 在 org.springframework.boot.test.context。SpringBootContextLoader.loadContext(SpringBootContextLoader.java:126) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java: 124) 在 org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:95) 在 org.springframework.org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123) .boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:79) 在 org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener。prepareTestInstance(MockitoTestExecutionListener.java:54) 在 org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) 在 org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:98)在 org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:342) 在 org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$5(ClassBasedTestDescriptor.java:337)。 jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:337) 在 java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) 在 java.base/java.util 。溪流。ReferencePipeline$2$1.accept(ReferencePipeline.java:177) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline. java:484) 在 java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) 在 java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312) 在 java .base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) 在 java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) 在 java.base/java .util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658) 在 org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor。invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:336) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:259) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java :252) 在 java.base/java.util.Optional.orElseGet(Optional.java:369) 在 org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:251) 在 org.junit org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) 在 org.junit.platform.engine 的 .jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:29)。 support.hierarchical.ThrowableCollector。在 org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) 在 org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) 执行(ThrowableCollector.java:73)在 org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:107) 在 org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) 在org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:107) 在 org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:75) 在 java.base/ org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService 上的 java.util.ArrayList.forEach(ArrayList.java:1540)。在 org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) 在 org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute 的 invokeAll(SameThreadHierarchicalTestExecutorService.java:38) (ThrowableCollector.java:73) 在 org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) 在 org.junit.platform.engine.support.hierarchical.Node.around( Node.java:135) 在 org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) 在 org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector .java:73) 在 org.junit 的 org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)。platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) 在 java.base/java.util.ArrayList.forEach(ArrayList.java:1540) 在 org.junit.platform.engine.support.hierarchical。 SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector .execute(ThrowableCollector.java:73) 在 org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) 在 org.junit.platform.engine.support.hierarchical.Node。在 org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) 在 org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) 在 org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) 在 org .junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) 在 org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) 在 org.junit.platform .engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) 在 org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) 在 org.junit.platform.launcher.core .DefaultLauncher.execute(DefaultLauncher.java:220) 在 org.junit.platform.launcher.core。DefaultLauncher.lambda$execute$6(DefaultLauncher.java:188) at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:202) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher .java:181) 在 org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:150) 在 org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128) 在 org. apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:124) 在 org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384) 在 org.apache.maven.surefire.booter。 ForkedBooter.runSuitesInProcess(ForkedBooter.java:345) 在 org.apache.maven.surefire.booter.ForkedBooter。在 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418) 处执行(ForkedBooter.java:126) 原因:java.lang.reflect.InvocationTargetException:在 java.base/jdk.internal 处为空。 reflect.GeneratedConstructorAccessor80.newInstance(Unknown Source) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) ) at org.apache.tomcat.util.compat.Jre9Compat.jarFileNewInstance(Jre9Compat.java:233) ... 112 个通用框架被省略 原因:java.nio.file.NoSuchFileException: C:\Users\USER.m2\repository \org\glassfish\ha\ha-api\3.1.12\javax.inject.jar 在 java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85) 在 java.base/sun.nio。fs.WindowsException.rethrowAsIOException(WindowsException.java:103) 在 java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108) 在 java.base/sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes( WindowsFileAttributeViews.java:53) 在 java.base/sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(WindowsFileAttributeViews.java:38) 在 java.base/sun.nio.fs.WindowsFileSystemProvider.readAttributes(WindowsFileSystemProvider.java:198)在 java.base/java.nio.file.Files.readAttributes(Files.java:1763) 在 java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1225) 在 java.base/java .util.zip.ZipFile$CleanableResource.(ZipFile.java:727) 在 java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:844) 在 java.base/java.util.zip。 ZipFile.(ZipFile.java:247) 在 java.base/java.util.zip.ZipFile.(ZipFile.java:177) 在 java.base/java.util.jar.JarFile.(JarFile.java:346) ...省略了 116 个常用帧

jaxws-rt 插件应该加载那个ha rependence,还是不加载?

在以下例外情况中,ha-API 包中缺少文件,而这些 jaxws-rt 依赖项中缺少另一个文件,例如:

引起:java.lang.NoClassDefFoundError:无法初始化类 com.jayway.jsonpath.internal.DefaultsImpl

如果我导入该 hp api 依赖项,问题不会消失。我不知道该怎么办,有人可以帮忙吗?

编辑:

文件夹里面有这些文件 在此处输入图像描述

编辑2:

从两个 QueryDsl 工件(apt 和 jpa)中排除注入依赖项后,我无法安装。这是我得到的错误:

从两个 querydsl 工件中排除该依赖项后,依赖项树中没有其他 javax.inject 。

构建“Q”对象时发生错误(querydsl 查询中使用的 QEntities)

[ERROR] execute error
java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.NoClassDefFoundError: javax/inject/Inject
    at java.util.concurrent.FutureTask.report (FutureTask.java:122)
    at java.util.concurrent.FutureTask.get (FutureTask.java:191)
    at com.mysema.maven.apt.AbstractProcessorMojo.execute (AbstractProcessorMojo.java:346)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
Caused by: java.lang.RuntimeException: java.lang.NoClassDefFoundError: javax/inject/Inject
    at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions (JavacTaskImpl.java:163)
    at com.sun.tools.javac.api.JavacTaskImpl.doCall (JavacTaskImpl.java:100)
    at com.sun.tools.javac.api.JavacTaskImpl.call (JavacTaskImpl.java:94)
    at com.sun.tools.javac.api.JavacTaskImpl.call (JavacTaskImpl.java:72)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
    at java.lang.Thread.run (Thread.java:834)
Caused by: java.lang.NoClassDefFoundError: javax/inject/Inject
    at com.querydsl.codegen.AbstractModule.createInstance (AbstractModule.java:116)
    at com.querydsl.codegen.AbstractModule.get (AbstractModule.java:86)
    at com.querydsl.apt.DefaultConfiguration.getTypeMappings (DefaultConfiguration.java:410)
    at com.querydsl.apt.AbstractQuerydslProcessor.process (AbstractQuerydslProcessor.java:86)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor (JavacProcessingEnvironment.java:980)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs (JavacProcessingEnvironment.java:896)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run (JavacProcessingEnvironment.java:1222)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing (JavacProcessingEnvironment.java:1334)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations (JavaCompiler.java:1258)
    at com.sun.tools.javac.main.JavaCompiler.compile (JavaCompiler.java:936)
    at com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0 (JavacTaskImpl.java:104)
    at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions (JavacTaskImpl.java:147)
    at com.sun.tools.javac.api.JavacTaskImpl.doCall (JavacTaskImpl.java:100)
    at com.sun.tools.javac.api.JavacTaskImpl.call (JavacTaskImpl.java:94)
    at com.sun.tools.javac.api.JavacTaskImpl.call (JavacTaskImpl.java:72)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
    at java.lang.Thread.run (Thread.java:834)
Caused by: java.lang.ClassNotFoundException: javax.inject.Inject
    at java.net.URLClassLoader.findClass (URLClassLoader.java:471)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:588)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:521)
    at com.querydsl.codegen.AbstractModule.createInstance (AbstractModule.java:116)
    at com.querydsl.codegen.AbstractModule.get (AbstractModule.java:86)
    at com.querydsl.apt.DefaultConfiguration.getTypeMappings (DefaultConfiguration.java:410)
    at com.querydsl.apt.AbstractQuerydslProcessor.process (AbstractQuerydslProcessor.java:86)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor (JavacProcessingEnvironment.java:980)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs (JavacProcessingEnvironment.java:896)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run (JavacProcessingEnvironment.java:1222)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing (JavacProcessingEnvironment.java:1334)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations (JavaCompiler.java:1258)
    at com.sun.tools.javac.main.JavaCompiler.compile (JavaCompiler.java:936)
    at com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0 (JavacTaskImpl.java:104)
    at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions (JavacTaskImpl.java:147)
    at com.sun.tools.javac.api.JavacTaskImpl.doCall (JavacTaskImpl.java:100)
    at com.sun.tools.javac.api.JavacTaskImpl.call (JavacTaskImpl.java:94)
    at com.sun.tools.javac.api.JavacTaskImpl.call (JavacTaskImpl.java:72)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
    at java.lang.Thread.run (Thread.java:834)

编辑 3:从 querydsl 依赖项中排除 javax.inject 并将其添加为正常依赖项后,它会编译,但在开始时显示这些警告(所有 NoSuchFileException:

...
Failed to scan [file:/C:/Users/USER/.m2/repository/com/sun/xml/ws/jaxws-rt/2.3.1/javax.annotation-api.jar] from classloader hierarchy
Failed to scan [file:/C:/Users/USER/.m2/repository/com/sun/xml/ws/jaxws-rt/2.3.1/javax.jws-api.jar] from classloader hierarchy
Failed to scan [file:/C:/Users/USER/.m2/repository/com/sun/xml/ws/jaxws-rt/2.3.1/jaxb-api.jar] from classloader hierarchy
ailed to scan [file:/C:/Users/USER/.m2/repository/com/sun/xml/ws/jaxws-rt/2.3.1/jaxws-api.jar] from classloader hierarchy
Failed to scan [file:/C:/Users/USER/.m2/repository/com/sun/xml/ws/jaxws-rt/2.3.1/javax.xml.soap-api.jar] from classloader hierarchy
Failed to scan [file:/C:/Users/USER/.m2/repository/com/sun/xml/ws/jaxws-rt/2.3.1/FastInfoset.jar] from classloader hierarchy
...

(以及来自 com/sun/** 的许多其他人)

然后还有很多来自 glassfish 的东西 - 仍然是 NoSuchFileException

...
Failed to scan [file:/C:/Users/USER/.m2/repository/org/glassfish/ha/ha-api/3.1.9/asm-all-repackaged.jar] from classloader hierarchy
Failed to scan [file:/C:/Users/USER/.m2/repository/org/glassfish/ha/ha-api/3.1.9/hk2-api.jar] from classloader hierarchy
Failed to scan [file:/C:/Users/USER/.m2/repository/org/glassfish/ha/ha-api/3.1.9/osgi-resource-locator.jar] from classloader hierarchy
...

标签: javamavenjava-ee-8

解决方案


问题在于 Tomcat Servler Jar 扫描

通过添加包含 tomcat 配置的 bean 禁用扫描清单来解决问题

@Bean
public TomcatServletWebServerFactory tomcatFactory() {
    return new CustomTomcatServletWebServerFactory();
}

static class CustomTomcatServletWebServerFactory extends TomcatServletWebServerFactory {

    @Override
    protected void postProcessContext(Context context) {
        ((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
    }
}

bean 也可以是非静态的,但如果您使用management.server.port属性(用于 Spring Boot Admin 应用程序等),则必须使该 Tomcat 配置静态。

另一个解决方案可以通过将其添加到 Spring Boot 应用程序中的应用程序属性文件来完成

server.tomcat.additional-tld-skip-patterns=*.jar

但是这个解决方案会破坏 JSP 或 JSTL 的支持!所以如果你必须在你的项目中使用这些技术,你必须添加上面的 Bean。


推荐阅读