2017-10-14 10 views
3

ビルドしている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

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

私は春のフレームワークの問題として、または任意の場合は、これを報告する必要がある場合は、私を知ってみましょう回避策が存在します。

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リリースの一部でなければなりません。

+1

どのバージョンのMavenですか?どのような依存関係と実行のコマンド? pom.xmlを共有すると良いです。質問は今のところ情報が非常に少ないです。どちらのプラットフォームでもいくつかの設定を手動で変更しない限り、実行が異なるのはなぜですか?また、ASM_6.xはJava9と互換性があり、それ以前のバージョンはありません。 – nullpointer

+0

@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を使用する方法はありますか? –

+0

ここにあります:https://gist.github.com/techpavan/bd19a677de7e05d34a96a149cc706299 –

答えて

0

ありがとうございました.GitHubののworkaroundが私にこの問題を助けました。 mainClassエントリのspring-boot-maven-plugin設定を追加するだけで、M5リリースでこの問題を解決できます。 M6に適切な修正を加える予定です。

  <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
+   <configuration> 
+    <mainClass>com.test.TestMain</mainClass> 
+   </configuration> 
     </plugin> 
5

あなたの次のよう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 

これは明らかに、プロジェクトのspring-boot-starter-jettyへの依存性がasm:5.1に依存しているとASMのバージョンは、最新のJavaリリースと互換性がないことを反映しています。あなたはそれの6.0_BETAバージョンにアップグレードすることができます。私はthis issueから知っているようになったものに


、桟橋があるためOSGIのバージョン番号との非互換性の最新バージョンにアップグレードしませんでした。

これは#を克服した後に達成された - 私は達成できるソリューションがローカルに桟橋を構築し、その答えに記載されているように私のプロジェクトにカスタムバージョンを使用していた前記vaadin8 application work with Java 9を作成しようとしているときに、私はその問題に直面したのですjetty.project/1758によって 6にアップグレードします。ASMおよびASM-コモンズライブラリの0_BETAと を使用しては、9.4.7-SNAPSHOTは、プロジェクトで使用される私のローカル上に構築されたカスタム(コミット - #e34415。)


更新:これを編集された質問でも確かに確認されているbug in spring-boot milestoneです。

+0

asmライブラリにバージョン6がリリースされました。しかし、それでも、私はまだ問題を抱えているようです。いくつかの試みを試みて、それを働かせることができませんでした。 Dependecyツリーには、ここで222行目のようにmaven-dependency-pluginによって使用されているものを除いて、古いバージョンのasmはありません - https://gist.github.com/techpavan/bd19a677de7e05d34a96a149cc706299#file-dependency-output-txt- L222 –

+1

@ PavanKumarそれを['3.0.2'](https://search.maven.org/#artifactdetails%7Corg.apache.maven.plugins%7Cmaven-dependency-plugin%7C3.0.2)にも更新してみてください%7Cmaven-plugin)..これを再現するサンプルプロジェクトを共有することもできます。これは、JAVA9との互換性のためにmavenが使用する第三者コンポーネントとそのバージョンをリストアップしています - https://cwiki.apache.org/confluence/display/MAVEN/Java+9+-+Jigsaw – nullpointer

+0

チケットを再生機で更新しました。また、いくつかの説明を追加しました。見てください。私にとっては、Springブートライブラリで修正する必要がある問題のようです。 –

関連する問題