ビルドしているJava 9アプリケーションがコンパイルされ、IntelliJ IDEからうまく機能します。 IDEでは、Springブートアプリケーションとプレーンアプリケーションの両方として設定しようとしましたが、両方の設定がうまく機能します。Java 9 SpringブートアプリケーションのMavenビルド中にRuntimeExceptionが発生する
mavenビルドを実行しているうちに、RuntimeException
のstacktraceが発生しました。
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
私は春のフレームワークの問題として、または任意の場合は、これを報告する必要がある場合は、私を知ってみましょう回避策が存在します。
Mavenのバージョン:3.5.0
春ブーツ:2.0.0.M5
そのモジュラービルドとPOMファイルはここにある:https://gist.github.com/techpavan/faa81d04cd50e7403b03d70a2e
シンプルな再生がここにあります - https://github.com/techpavan/java9-maven-spring-boot
この再生器を使用すると、Mavenビルドが簡単に失敗することがわかります。しかし、org.springframework.asm.ClassVisitor> 78行目(コンストラクター)にブレークポイントを置き、実行中にapi値を393216(ASM6)に更新すると、ビルドが正常に完了します。 https://github.com/spring-projects/spring-boot/issues/10647
アップデート - 問題は、春のコミュニティでバグとして受け入れられ、マイルストーン6リリースで修正されなければならない:デフォルト値は、ライン147
更新に失敗262144(ASM4)に設定されています:問題は2017年10月17日のspring-boot masterブランチで修正されています。M6リリースの一部でなければなりません。
どのバージョンのMavenですか?どのような依存関係と実行のコマンド? pom.xmlを共有すると良いです。質問は今のところ情報が非常に少ないです。どちらのプラットフォームでもいくつかの設定を手動で変更しない限り、実行が異なるのはなぜですか?また、ASM_6.xはJava9と互換性があり、それ以前のバージョンはありません。 – nullpointer
@nullpointer質問にMavenとSpringの起動バージョンが更新されました。すべて最新です。依存関係には、guavaとcommons-lang3が含まれますが、TomcatではなくJettyに切り替えられました。これらとは別に、ここで解決されたM1とM2のパッケージxyをモジュールMが読み取るような問題を解決するためのいくつかの除外項目があります - https://stackoverflow.com/questions/44697738/how-to-resolve-module-reads-package-error -in-java9/ MavenビルドでASM_6を使用する方法はありますか? –
ここにあります:https://gist.github.com/techpavan/bd19a677de7e05d34a96a149cc706299 –