gpt4 book ai didi

java - Java 9 spring boot 应用程序的 maven 构建期间的 RuntimeException

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:40 25 4
gpt4 key购买 nike

我正在构建的 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 level引起的。直接执行时,它是 org.springframework.asm.Opcodes#ASM6,但是当使用 maven build 时,它是导致问题的 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

Spring 启动:2.0.0.M5

它是一个模块化构建和 POM 文件在这里:https://gist.github.com/techpavan/faa81d46321004cd50e7403b03d70a2e

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

有了这个复制器,你会发现maven构建很容易失败。但是当在 org.springframework.asm.ClassVisitor > line 78 (Constructor) 下断点并将执行期间的 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 dependency: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

这清楚地反射(reflect)了你的项目对spring-boot-starter-jetty的依赖依赖于asm:5.1并且asm的版本不兼容最新的Java 发布。您可以尝试升级到6.0_BETA它的版本。


我从 this issue 了解到的, jetty因为与OSGI版本号不兼容,没有升级到最新版本。我在尝试制作 vaadin8 application work with Java 9 时遇到了这个问题其中我可以实现的解决方案是在本地构建 jetty ,然后在我的项目中使用自定义版本,如答案中所述 -

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正如编辑后的问题中所证实的那样。

关于java - Java 9 spring boot 应用程序的 maven 构建期间的 RuntimeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46744154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com