赋料扬雄敌,诗看子建亲。这篇文章主要讲述JAXB ClassNotFoundException使用Java 11构建Spring Boot App 2.2.0相关的知识,希望能为你提供帮助。
我使用版本2.2.0.BUILD-SNAPSHOT和java 11(下面的POM)创建了一个Spring Boot应用程序:
<
?xml version="1.0" encoding="UTF-8"?>
<
project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<
modelVersion>
4.0.0<
/modelVersion>
<
parent>
<
groupId>
org.springframework.boot<
/groupId>
<
artifactId>
spring-boot-starter-parent<
/artifactId>
<
version>
2.2.0.BUILD-SNAPSHOT<
/version>
<
relativePath/>
<
!-- lookup parent from repository -->
<
/parent>
<
groupId>
com.mycompany<
/groupId>
<
artifactId>
Eureka-Service<
/artifactId>
<
version>
0.0.1-SNAPSHOT<
/version>
<
name>
Eureka-Service<
/name>
<
description>
Spring Boot Eureka Service<
/description>
<
properties>
<
java.version>
11<
/java.version>
<
spring-cloud.version>
Greenwich.BUILD-SNAPSHOT<
/spring-cloud.version>
<
/properties>
<
dependencies>
<
dependency>
<
groupId>
org.springframework.boot<
/groupId>
<
artifactId>
spring-boot-starter-actuator<
/artifactId>
<
/dependency>
<
dependency>
<
groupId>
org.springframework.cloud<
/groupId>
<
artifactId>
spring-cloud-starter-netflix-eureka-server<
/artifactId>
<
/dependency>
<
dependency>
<
groupId>
org.springframework.boot<
/groupId>
<
artifactId>
spring-boot-starter-test<
/artifactId>
<
scope>
test<
/scope>
<
/dependency>
<
dependency>
<
groupId>
org.springframework.boot<
/groupId>
<
artifactId>
spring-boot-starter-web<
/artifactId>
<
/dependency>
<
dependency>
<
groupId>
javax.xml.bind<
/groupId>
<
artifactId>
jaxb-api<
/artifactId>
<
version>
2.3.1<
/version>
<
/dependency>
<
/dependencies>
<
dependencyManagement>
<
dependencies>
<
dependency>
<
groupId>
org.springframework.cloud<
/groupId>
<
artifactId>
spring-cloud-dependencies<
/artifactId>
<
version>
${spring-cloud.version}<
/version>
<
type>
pom<
/type>
<
scope>
import<
/scope>
<
/dependency>
<
/dependencies>
<
/dependencyManagement>
<
build>
<
plugins>
<
plugin>
<
groupId>
org.springframework.boot<
/groupId>
<
artifactId>
spring-boot-maven-plugin<
/artifactId>
<
/plugin>
<
/plugins>
<
/build>
<
repositories>
<
repository>
<
id>
spring-snapshots<
/id>
<
name>
Spring Snapshots<
/name>
<
url>
https://repo.spring.io/snapshot<
/url>
<
snapshots>
<
enabled>
true<
/enabled>
<
/snapshots>
<
/repository>
<
repository>
<
id>
spring-milestones<
/id>
<
name>
Spring Milestones<
/name>
<
url>
https://repo.spring.io/milestone<
/url>
<
/repository>
<
/repositories>
<
pluginRepositories>
<
pluginRepository>
<
id>
spring-snapshots<
/id>
<
name>
Spring Snapshots<
/name>
<
url>
https://repo.spring.io/snapshot<
/url>
<
snapshots>
<
enabled>
true<
/enabled>
<
/snapshots>
<
/pluginRepository>
<
pluginRepository>
<
id>
spring-milestones<
/id>
<
name>
Spring Milestones<
/name>
<
url>
https://repo.spring.io/milestone<
/url>
<
/pluginRepository>
<
/pluginRepositories>
<
/project>
当应用程序启动时,它会抛出此异常:
2018-12-30 14:09:43.584INFO 1305 --- [main]
c.n.d.provider.DiscoveryJerseyProvider: Using XML encoding codec
XStreamXml
2018-12-30 14:09:43.584INFO 1305 --- [main]
c.n.d.provider.DiscoveryJerseyProvider: Using XML decoding codec
XStreamXml
2018-12-30 14:09:43.710 ERROR 1305 --- [main] c.s.j.s.i.w.WadlApplicationContextImpl: Implementation of JAXB-API has not been found on module path or classpath.javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:177) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.ContextFinder.find(ContextFinder.java:364) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:508) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:465) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:366) ~[jaxb-api-2.3.1.jar:2.3.0]
at com.sun.jersey.server.impl.wadl.WadlApplicationContextImpl.<
init>
(WadlApplicationContextImpl.java:107) ~[jersey-server-1.19.1.jar:1.19.1]
at com.sun.jersey.server.impl.wadl.WadlFactory.init(WadlFactory.java:100) ~[jersey-server-1.19.1.jar:1.19.1]
at com.sun.jersey.server.impl.application.RootResourceUriRules.initWadl(RootResourceUriRules.java:169) ~[jersey-server-1.19.1.jar:1.19.1]
at com.sun.jersey.server.impl.application.RootResourceUriRules.<
init>
(RootResourceUriRules.java:106) ~[jersey-server-1.19.1.jar:1.19.1]
at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1359) ~[jersey-server-1.19.1.jar:1.19.1]
at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180) ~[jersey-server-1.19.1.jar:1.19.1]
at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799) ~[jersey-server-1.19.1.jar:1.19.1]
at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795) ~[jersey-server-1.19.1.jar:1.19.1]
at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193) ~[jersey-core-1.19.1.jar:1.19.1]
at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795) ~[jersey-server-1.19.1.jar:1.19.1]
at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790) ~[jersey-server-1.19.1.jar:1.19.1]
at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509) ~[jersey-servlet-1.19.1.jar:1.19.1]
at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339) ~[jersey-servlet-1.19.1.jar:1.19.1]
at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605) ~[jersey-servlet-1.19.1.jar:1.19.1]
at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207) ~[jersey-servlet-1.19.1.jar:1.19.1]
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394) ~[jersey-servlet-1.19.1.jar:1.19.1]
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:744) ~[jersey-servlet-1.19.1.jar:1.19.1]
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:270) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.core.ApplicationFilterConfig.<
init>
(ApplicationFilterConfig.java:106) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4511) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5157) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1382) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1372) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140) ~[na:na]
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:907) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:831) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1382) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1372) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140) ~[na:na]
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:907) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:423) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:933) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.catalina.startup.Tomcat.start(Tomcat.java:398) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:106) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<
init>
(TomcatWebServer.java:86) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:414) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:174) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:181) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:154) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:540) ~[spring-context-5.1.4.BUILD-SNAPSHOT.jar:5.1.4.BUILD-SNAPSHOT]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at com.orbis.EurekaServiceApplication.main(EurekaServiceApplication.java:13) ~[classes/:na]
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
at org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader.loadClass(TomcatEmbeddedWebappClassLoader.java:70) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1173) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:122) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:155) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:174) ~[jaxb-api-2.3.1.jar:2.3.0]
... 61 common frames omitted2018-12-30 14:09:43.790WARN 1305 --- [main] o.s.c.n.a.ArchaiusAutoConfiguration: No spring.application.name found, defaulting to 'application'
2018-12-30 14:09:43.790WARN 1305 --- [main] c.n.c.sources.URLConfigurationSource: No URLs will be polled as dynamic configuration sources.
2018-12-30 14:09:43.791INFO 1305 --- [main] c.n.c.sources.URLConfigurationSource: To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2018-12-30 14:09:43.922INFO 1305 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor: Initializing ExecutorService 'applicationTaskExecutor'
2018-12-30 14:09:44.330INFO 1305 --- [main] o.s.c.n.eureka.InstanceInfoFactory: Setting initial instance status as: STARTING
2018-12-30 14:09:44.368INFO 1305 --- [main] com.netflix.discovery.DiscoveryClient: Initializing Eureka in region us-east-1
2018-12-30 14:09:44.368INFO 1305 --- [main] com.netflix.discovery.DiscoveryClient: Client configured to neither register nor query for data.
2018-12-30 14:09:44.378INFO 1305 --- [main] com.netflix.discovery.DiscoveryClient: Discovery Client initialized at timestamp 1546178984375 with initial instances count: 0
2018-12-30 14:09:44.405INFO 1305 --- [main] c.n.eureka.DefaultEurekaServerContext: Initializing ...
2018-12-30 14:09:44.406INFO 1305 --- [main] c.n.eureka.cluster.PeerEurekaNodes: Adding new peer nodes [http://localhost:8761/eureka/]
2018-12-30 14:09:44.583INFO 1305 --- [main] c.n.d.provider.DiscoveryJerseyProvider: Using JSON encoding codec LegacyJacksonJson
2018-12-30 14:09:44.584INFO 1305 --- [main] c.n.d.provider.DiscoveryJerseyProvider: Using JSON decoding codec LegacyJacksonJson
2018-12-30 14:09:44.584INFO 1305 --- [main] c.n.d.provider.DiscoveryJerseyProvider: Using XML encoding codec XStreamXml
2018-12-30 14:09:44.584INFO 1305 --- [main] c.n.d.provider.DiscoveryJerseyProvider: Using XML decoding codec XStreamXml
2018-12-30 14:09:44.668INFO 1305 --- [main] c.n.eureka.cluster.PeerEurekaNodes: Replica node URL:http://localhost:8761/eureka/
2018-12-30 14:09:44.675INFO 1305 --- [main] c.n.e.registry.AbstractInstanceRegistry: Finished initializing remote region registries. All known remote regions: []
2018-12-30 14:09:44.675INFO 1305 --- [main] c.n.eureka.DefaultEurekaServerContext: Initialized
2018-12-30 14:09:44.682INFO 1305 --- [main] o.s.b.a.e.web.EndpointLinksResolver: Exposing 2 endpoint(s) beneath base path '/actuator'
2018-12-30 14:09:44.741INFO 1305 --- [main] o.s.c.n.e.s.EurekaServiceRegistry: Registering application UNKNOWN with eureka with status UP
2018-12-30 14:09:44.744INFO 1305 --- [Thread-12] o.s.c.n.e.server.EurekaServerBootstrap: Setting the eureka configuration..
2018-12-30 14:09:44.745INFO 1305 --- [Thread-12] o.s.c.n.e.server.EurekaServerBootstrap: Eureka data center value eureka.datacenter is not set, defaulting to default
2018-12-30 14:09:44.745INFO 1305 --- [Thread-12] o.s.c.n.e.server.EurekaServerBootstrap: Eureka environment value eureka.environment is not set, defaulting to test
2018-12-30 14:09:44.754INFO 1305 --- [Thread-12] o.s.c.n.e.server.EurekaServerBootstrap: isAws returned false
2018-12-30 14:09:44.755INFO 1305 --- [Thread-12] o.s.c.n.e.server.EurekaServerBootstrap: Initialized server context
2018-12-30 14:09:44.755INFO 1305 --- [Thread-12] c.n.e.r.PeerAwareInstanceRegistryImpl: Got 1 instances from neighboring DS node
2018-12-30 14:09:44.755INFO 1305 --- [Thread-12] c.n.e.r.PeerAwareInstanceRegistryImpl: Renew threshold is: 1
2018-12-30 14:09:44.755INFO 1305 --- [Thread-12] c.n.e.r.PeerAwareInstanceRegistryImpl: Changing status to UP
2018-12-30 14:09:44.761INFO 1305 --- [Thread-12] e.s.EurekaServerInitializerConfiguration : Started Eureka Server
2018-12-30 14:09:44.775INFO 1305 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer: Tomcat started on port(s): 8761 (http) with context path ''
2018-12-30 14:09:44.775INFO 1305 --- [main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8761
2018-12-30 14:09:44.777INFO 1305 --- [main] com.orbis.EurekaServiceApplication: Started EurekaServiceApplication in 4.097 seconds (JVM running for 5.186)
2018-12-30 14:10:44.762INFO 1305 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry: Running the evict task with compensationTime 0msaa
但是,当我删除以下依赖项时:
<
dependency>
<
groupId>
javax.xml.bind<
/groupId>
<
artifactId>
jaxb-api<
/artifactId>
<
version>
2.3.1<
/version>
<
/dependency>
应用程序无法启动:
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:125) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<
init>
(TomcatWebServer.java:86) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:414) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:174) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:181) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:154) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
... 8 common frames omitted
Caused by: java.lang.IllegalStateException: StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[] failed to start
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.rethrowDeferredStartupExceptions(TomcatWebServer.java:171) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:109) ~[spring-boot-2.2.0.BUILD-SNAPSHOT.jar:2.2.0.BUILD-SNAPSHOT]
... 13 common frames omitted
答案从Java 9开始,JAXB实现已被删除。所以你添加的只是API,你还需要添加实现。可能有几种选择。
作为一个你可以添加的修复 - 例如,我猜也有其他实现 - 这种依赖:
<
dependency>
<
groupId>
org.eclipse.persistence<
/groupId>
<
artifactId>
org.eclipse.persistence.moxy<
/artifactId>
<
version>
2.7.3<
/version>
<
/dependency>
Here是一个很好的解释。
为什么删除它(摘自上面的链接):
Java的标准库并不是那么小巧轻便。在过去20多年的过程中,已经添加了许多功能,主要是因为当时认为如果Java支持开箱即用的特定技术将是一个好主意。
其中之一是对基于XML的Web服务的支持。当Java SE 6于2006年12月发布时,基于XML的Web服务很受欢迎,因此Java语言的开发人员认为,如果Java支持将Web服务作为标准功能进行调用,那将是一个好主意。决定将最初作为Java EE的一部分开发的必要API添加到Java SE。其中包括JAX-WS(基于XML的Web服务的Java API)和JAXB。
随着当今微服务的发展趋势,Java运行时环境小巧轻便非常重要,因此拥有一个内置支持所有可能技术的大型运行时库不再具有优势。
【JAXB ClassNotFoundException使用Java 11构建Spring Boot App 2.2.0】因此,在JEP-320中提出了从JDK中删除Java EE和CORBA模块的提议。
推荐阅读
- Jackson XML Mapper为列表编写两次元素名称
- Android - 在寻呼机中获取片段的上下文
- Android rtl viewpager with rtl tablayout
- Android Exoplayer,在屏幕旋转时恢复视频
- 如何在你的Cordova Android应用中添加对Samsung Multi Window和PopUp模式的支持
- 8个最佳的Magento扩展程序,将促进你的在线业务
- Cordova中的Android错误(请安装Android目标:” android-x”)
- 性能提升(通过为Magento2选择Headless浏览器)
- 编译的cordova android应用已成功构建,但未在android 4.2中启动