我正在构建的Java 9应用程序编译并在IntelliJ IDE中运行良好。在IDE上,我尝试配置Spring Boot应用程序以及普通应用程序,并且两种配置都很好。Maven构建Java 9弹簧引导应用程序时的RuntimeException
在执行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
让我知道如果我要报这与Spring框架,或者任何一个问题解决方法存在。
Maven版本:3.5.0
春季启动:2.0.0.M5
其模块化的结构和POM文件的位置:https://gist.github.com/techpavan/faa81d04cd50e7403b03d70a2e
一个更简单的再生可在这里 - https://github.com/techpavan/java9-maven-spring-boot
有了这个重现器,你可以发现maven build很容易失败。但是,当在org.springframework.asm.ClassVisitor>第78行(构造函数)处放置断点并在执行期间将api值更新为393216(ASM6)时,您会发现构建成功完成。默认情况下,该值设置为262144(ASM4)未有在线路147
更新:这个问题是由Spring社区接受错误,并应固定在里程碑6版本 - https://github.com/spring-projects/spring-boot/issues/10647
更新:该问题在2017年10月17日的spring-boot master分支中得到修复。应该是M6发布的一部分。
什么版本的maven?什么依赖和什么命令的执行?很好,如果你分享pom.xml。截至目前,这个问题的信息非常少。为什么执行会有所不同,除非您已在任一平台上手动修改某些配置?另外,ASM_6.x与Java9兼容,并且没有其他版本。 – nullpointer
@nullpointer更新问题中的Maven和Spring启动版本。最新的。依赖包括番石榴和commons-lang3,但切换到Jetty而不是Tomcat。除此之外,我还有一些例外情况来解决模块M从M1和M2读取软件包xy的问题 - https://stackoverflow.com/questions/44697738/how-to-resolve-module-reads-package-error -in-java9/ 有什么办法可以强制Maven构建使用ASM_6? –
这里是:https://gist.github.com/techpavan/bd19a677de7e05d34a96a149cc706299 –