2016-09-14 68 views
7

我一直在研究JDK 9的Jigsaw模塊化系統。Java 9 - Spring 5&Jigsaw的REST - 可以嗎?

從命令行(至少quickstart)編譯時,它工作得非常好。

但我想用Spring和Jigsaw創建一個簡單的REST API。 Spring 5.0.0 M1據說有

Full compatibility with JDK 9 as of July 2016

我也希望REST API與Maven一起工作。根據this Maven page, Maven應該能夠使用Java 9(或者我讀這個錯誤?)。

有我的JAVA_HOME指向我的JDK的時候,我似乎無法運行在我的春節,啓動應用程序mvn spring-boot:run - 它拋出了很多例外,如:

FoundError: javax/xml/bind/ValidationException 
2016-09-14 10:43:42.704 ERROR 120408 --- [   main] o.s.boot.SpringApplication    : Application startup failed 

運行mvn -version給我:

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00) 
Maven home: C:\Program Files\apache-maven-3.3.9\bin\.. 
Java version: 9-ea, vendor: Oracle Corporation 
Java home: C:\Program Files\Java\jdk-9 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos" 

當前是否可以使用Jigsaw與Spring和Java 9創建此REST API?或者我應該堅持到Java 8,直到2017年3月/ 7月左右?

完整的堆棧轉儲:

2016-09-14 10:43:42.688 WARN 120408 --- [   main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException:       Unable to start embedded container; nested exception is org.springframework.bea       ns.factory.BeanCreationException: Error creating bean with name 'tomcatEmbeddedS       ervletContainerFactory' defined in class path resource [org/springframework/boot       /autoconfigure/web/EmbeddedServletContainerAutoConfiguration$EmbeddedTomcat.clas       s]: Initialization of bean failed; nested exception is org.springframework.beans       .factory.UnsatisfiedDependencyException: Error creating bean with name 'org.spri       ngframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration': Unsatisfied d       ependency expressed through constructor parameter 0: Error creating bean with na       me 'spring.http.encoding-org.springframework.boot.autoconfigure.web.HttpEncoding       Properties': Initialization of bean failed; nested exception is java.lang.NoClas       sDefFoundError: javax/xml/bind/ValidationException; nested exception is org.spri       ngframework.beans.factory.BeanCreationException: Error creating bean with name '       spring.http.encoding-org.springframework.boot.autoconfigure.web.HttpEncodingProp       erties': Initialization of bean failed; nested exception is java.lang.NoClassDef       FoundError: javax/xml/bind/ValidationException 
2016-09-14 10:43:42.704 ERROR 120408 --- [   main] o.s.boot.SpringApplication    : Application startup failed 

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tomcatEmbeddedServletContainerFactory'       defined in class path resource [org/springframework/boot/autoconfigure/web/Embed       dedServletContainerAutoConfiguration$EmbeddedTomcat.class]: Initialization of be       an failed; nested exception is org.springframework.beans.factory.UnsatisfiedDepe       ndencyException: Error creating bean with name 'org.springframework.boot.autocon       figure.web.HttpEncodingAutoConfiguration': Unsatisfied dependency expressed thro       ugh constructor parameter 0: Error creating bean with name 'spring.http.encoding       -org.springframework.boot.autoconfigure.web.HttpEncodingProperties': Initializat       ion of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/xm       l/bind/ValidationException; nested exception is org.springframework.beans.factor       y.BeanCreationException: Error creating bean with name 'spring.http.encoding-org       .springframework.boot.autoconfigure.web.HttpEncodingProperties': Initialization       of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bi       nd/ValidationException 
     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:137) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:535) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
     at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
     at hello.Application.main(Application.java:10) [classes/:na] 
     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0([email protected]/Native Method) ~[na:na] 
     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke([email protected]/NativeMethodAccessorImpl.java:62) ~[na:na] 
     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke([email protected]/DelegatingMethodAccessorImpl.java:43) ~[na:na] 
     at java.lang.reflect.Method.invoke([email protected]/Method.java:535) ~[na:na] 
     at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:483) [spring-boot-maven-plugin-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
     at java.lang.Thread.run([email protected]/Thread.java:843) [na:na] 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tomcatEmbeddedServletContainerFactory' defined in class path resource [org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAut       oConfiguration$EmbeddedTomcat.class]: Initialization of bean failed; nested exce       ption is org.springframework.beans.factory.UnsatisfiedDependencyException: Error       creating bean with name 'org.springframework.boot.autoconfigure.web.HttpEncodin       gAutoConfiguration': Unsatisfied dependency expressed through constructor parame       ter 0: Error creating bean with name 'spring.http.encoding-org.springframework.b       oot.autoconfigure.web.HttpEncodingProperties': Initialization of bean failed; ne       sted exception is java.lang.NoClassDefFoundError: javax/xml/bind/ValidationExcep       tion; nested exception is org.springframework.beans.factory.BeanCreationExceptio       n: Error creating bean with name 'spring.http.encoding-org.springframework.boot.       autoconfigure.web.HttpEncodingProperties': Initialization of bean failed; nested       exception is java.lang.NoClassDefFoundError: javax/xml/bind/ValidationException 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:199) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:162) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:134) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
     ... 14 common frames omitted 
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration': Unsatisfied dependency expressed through constructor para       meter 0: Error creating bean with name 'spring.http.encoding-org.springframework       .boot.autoconfigure.web.HttpEncodingProperties': Initialization of bean failed;       nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/ValidationExc       eption; nested exception is org.springframework.beans.factory.BeanCreationExcept       ion: Error creating bean with name 'spring.http.encoding-org.springframework.boo       t.autoconfigure.web.HttpEncodingProperties': Initialization of bean failed; nest       ed exception is java.lang.NoClassDefFoundError: javax/xml/bind/ValidationExcepti       on 
     at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:189) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:372) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 

----切斷

總結錯誤:

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin       
:1.4.0.RELEASE:run (default-cli) on project gs-rest-service: An exception occurr       
ed while running. null: InvocationTargetException: Unable to start embedded cont       
ainer; nested exception is org.springframework.beans.factory.BeanCreationExcepti  
on: Error creating bean with name 'tomcatEmbeddedServletContainerFactory' define       
d in class path resource [org/springframework/boot/autoconfigure/web/EmbeddedSer 
vletContainerAutoConfiguration$EmbeddedTomcat.class]: Initialization of bean fai      
led; nested exception is org.springframework.beans.factory.UnsatisfiedDependency    
Exception: Error creating bean with name 'org.springframework.boot.autoconfigure  
.web.HttpEncodingAutoConfiguration': Unsatisfied dependency expressed through co       
nstructor parameter 0: Error creating bean with name 'spring.http.encoding-org.s   
pringframework.boot.autoconfigure.web.HttpEncodingProperties': Initialization of       
bean failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind       
/ValidationException; nested exception is org.springframework.beans.factory.Bean      
CreationException: Error creating bean with name 'spring.http.encoding-org.sprin    
gframework.boot.autoconfigure.web.HttpEncodingProperties': Initialization of bea       
n failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/Val       
idationException: javax.xml.bind.ValidationException -> [Help 1] 
+0

添加了整個堆棧,我們會真正看到你在說什麼異常。 「應用程序啓動失敗」對我們沒有用處。 – rorschach

+0

只需修剪最低級別的異常。 [如何讀取堆棧跟蹤](https://bukkit.org/threads/how-to-read-stack-traces-and-troubleshoot-your-own-plugins-by-yourself.32457/) – rorschach

回答

2
Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/ValidationException: javax.xml.bind.ValidationException 

你缺少的依賴,特別是this one

+3

這隱含地是造成的通過使用Java 9作爲JDK,由於此REST API使用Spring引導,並且尚未與JDK9 /模塊兼容的彈簧引導版本?或者在那裏? – Ivaro18

+0

你添加了依賴關係嗎?發生了什麼? – rorschach

1

由於您使用您需要手動添加非默認的模塊時,編譯和運行Java9:

javac --add-modules java.xml.bind ... 
java --add-modules java.xml.bind ... 

如果有其他失蹤的Java EE類嘗試添加筒模塊:

--add-module java.se.ee 
0

rorschach的答案是不正確的,因爲hibernate驗證異常是在不同的包中,不同的類。我沒有足夠的代表點直接發表評論。

zhy2002的答案對於僅適用於Java-9的情況是正確的,但對於Java 8或10不適用(因爲此Java ee模塊已被棄用且將在10版中被刪除)。如果你希望它與Java 8和Java 9,因爲我們做的工作,你可以添加這種依賴性:

搖籃:

compile "javax.xml.bind:jaxb-api:2.3.0" 

Maven的:

<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api --> 
<dependency> 
    <groupId>javax.xml.bind</groupId> 
    <artifactId>jaxb-api</artifactId> 
    <version>2.3.0</version> 
</dependency> 

在這裏看到:
How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9

0

在Spring Boot的情況下,您需要添加maven pom:

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <configuration> 
     <jvmArguments>--add-modules java.xml.bind</jvmArguments> 
     <mainClass>org.springframework.samples.petclinic.PetClinicApplication</mainClass> 
    </configuration> 
... 

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-data-jpa</artifactId> 
    <exclusions> 
     <exclusion> 
      <artifactId>javassist</artifactId> 
      <groupId>org.javassist</groupId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>org.javassist</groupId> 
    <artifactId>javassist</artifactId> 
    <version>3.22.0-GA</version> 
    <scope>runtime</scope> 
</dependency> 

https://blog.frankel.ch/migrating-to-java-9/2/

相關問題