编程语言
首页 > 编程语言> > Java 9 Spring Boot应用程序的Maven构建期间的RuntimeException

Java 9 Spring Boot应用程序的Maven构建期间的RuntimeException

作者:互联网

我正在构建的Java 9应用程序可以通过IntelliJ IDE进行编译并运行良好.在IDE上,我尝试将其配置为Spring Boot应用程序和普通应用程序,并且两种配置都能正常工作.

在执行Maven构建时,我在堆栈跟踪下面遇到RuntimeException.

Caused by: java.lang.RuntimeException
    at org.springframework.asm.ClassVisitor.visitModule(ClassVisitor.java:148)
    at org.springframework.asm.ClassReader.readModule(ClassReader.java:762)
    at org.springframework.asm.ClassReader.accept(ClassReader.java:663)
    at org.springframework.asm.ClassReader.accept(ClassReader.java:527)
    at org.springframework.boot.loader.tools.MainClassFinder.createClassDescriptor(MainClassFinder.java:267)
    at org.springframework.boot.loader.tools.MainClassFinder.doWithMainClasses(MainClassFinder.java:223)
    at org.springframework.boot.loader.tools.MainClassFinder.findSingleMainClass(MainClassFinder.java:203)
    at org.springframework.boot.loader.tools.Repackager.findMainMethod(Repackager.java:365)
    at org.springframework.boot.loader.tools.Repackager.findMainMethodWithTimeoutWarning(Repackager.java:354)
    at org.springframework.boot.loader.tools.Repackager.buildManifest(Repackager.java:325)
    at org.springframework.boot.loader.tools.Repackager.repackage(Repackager.java:255)
    at org.springframework.boot.loader.tools.Repackager.repackage(Repackager.java:248)
    at org.springframework.boot.loader.tools.Repackager.repackage(Repackager.java:193)
    at org.springframework.boot.maven.RepackageMojo.repackage(RepackageMojo.java:221)
    at org.springframework.boot.maven.RepackageMojo.execute(RepackageMojo.java:208)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    ... 22 more

经过分析,其原因是由于提供了ASM api级别.通过直接执行,它是org.springframework.asm.Opcodes#ASM6,但是在使用Maven构建时,正是Opcodes#ASM4引起了问题.

进一步分析发现,实例创建如下:
Maven版本-https://github.com/spring-projects/spring-boot/blob/d3c34ee3d1bfd3db4a98678c524e145ef9bca51c/spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/MainClassFinder.java#L301

IDE执行-https://github.com/spring-projects/spring-framework/blob/43b5e21947f3ad9682ae39cd8b8b5ae4b8f72c14/spring-core/src/main/java/org/springframework/core/type/classreading/ClassMetadataReadingVisitor.java#L71

让我知道是否需要将其报告为Spring Framework的问题或是否存在任何解决方法.

Maven版本:3.5.0

春季靴:2.0.0.M5

其模块化构建和POM文件位于:https://gist.github.com/techpavan/faa81d46321004cd50e7403b03d70a2e

一个更简单的复制器在这里可用-https://github.com/techpavan/java9-maven-spring-boot

使用此复制器,您可以发现Maven构建很容易失败.但是当在org.springframework.asm.ClassVisitor>第78行(构造函数)并将执行期间的api值更新为393216(ASM6),您会发现构建成功完成.默认情况下,该值设置为262144(ASM4),该行在第147行失败.

更新:该问题被Spring社区视为错误,并且应在Milestone 6版本-https://github.com/spring-projects/spring-boot/issues/10647中修复

更新:此问题已在2017年10月17日的spring-boot master分支中得到解决.应该是M6版本的一部分.

解决方法:

您的mvn依赖项:tree描述如下:

➜[main] [INFO] +- org.springframework.boot:spring-boot-starter-jetty:jar:2.0.0.M5:compile
 [main] [INFO] |  +- org.eclipse.jetty:jetty-servlets:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |  +- org.eclipse.jetty:jetty-continuation:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |  +- org.eclipse.jetty:jetty-http:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |  +- org.eclipse.jetty:jetty-util:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |  \- org.eclipse.jetty:jetty-io:jar:9.4.7.v20170914:compile
 [main] [INFO] |  +- org.eclipse.jetty:jetty-webapp:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |  +- org.eclipse.jetty:jetty-xml:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |  \- org.eclipse.jetty:jetty-servlet:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |     \- org.eclipse.jetty:jetty-security:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |        \- org.eclipse.jetty:jetty-server:jar:9.4.7.v20170914:compile
 [main] [INFO] |  +- org.eclipse.jetty.websocket:websocket-server:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |  +- org.eclipse.jetty.websocket:websocket-common:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |  |  \- org.eclipse.jetty.websocket:websocket-api:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |  +- org.eclipse.jetty.websocket:websocket-client:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |  |  \- org.eclipse.jetty:jetty-client:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |  \- org.eclipse.jetty.websocket:websocket-servlet:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |     \- javax.servlet:javax.servlet-api:jar:3.1.0:compile
 [main] [INFO] |  +- org.eclipse.jetty.websocket:javax-websocket-server-impl:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |  +- org.eclipse.jetty:jetty-annotations:jar:9.4.7.v20170914:compile
 [main] [INFO] |  |  |  +- org.eclipse.jetty:jetty-plus:jar:9.4.7.v20170914:compile
➜[main] [INFO] |  |  |  +- org.ow2.asm:asm:jar:5.1:compile
 [main] [INFO] |  |  |  \- org.ow2.asm:asm-commons:jar:5.1:compile
 [main] [INFO] |  |  |     \- org.ow2.asm:asm-tree:jar:5.1:compile

这清楚地反映出您的项目对spring-boot-starter-jetty的依赖依赖于asm:5.1,而asm的版本与最新的Java版本不兼容.您可以尝试升级到6.0_BETA版本.

this issue开始,Jetty并未升级到最新版本,因为它与OSGI版本号不兼容.我在尝试制作vaadin8 application work with Java 9时遇到了这个问题,我可以实现的解决方案是在本地建造码头,然后按照答案中的说明在我的项目中使用自定义版本-

This was attained after overcoming the #jetty.project/1758 by
upgrading to the 6.0_BETA of asm and asm-commons libraries and using
the custom 9.4.7-SNAPSHOT built on my local used in the project(commit
– #e34415.)

更新:这确实是bug in spring-boot milestone,也已在编辑的问题中得到确认.

标签:spring-boot,maven,java-9,spring,java
来源: https://codeday.me/bug/20191025/1930032.html