Spring bootアプリケーションをMavenでjar化し実行した際のエラーとか

 

 

バージョン情報

Spring boot version 2.1.1.RELEASE
Maven 3.6

javaコマンドで実行するJar実行ファイルを作成する。

 

mvn clean package コマンドでSpringアプリケーションをjar化。

jar化したアプリケーションをjava -jar MyApp.jar で実行してみると実行時エラーとなった。

実行時エラー その1

MyApp.jarにメイン・マニフェスト属性がありません。

あらら・・・?そんな初歩的な。MANIFEST.MFくらい勝手にうまいこと作ってくれると思ってたのに・・・。Jar展開してみたらたしかにMANIFEST.MFにメインクラスの記載がない・・・。

pom.xmlにMANIFEST宣言を追加してみる。

  

  
    ...
    
      org.apache.maven.plugins
      maven-jar-plugin
      
        
          
            net.rizworks.app.MyBatchApplication
          
        
      
    
    ...

mvnコマンド再実行。これでjar内のMANIFEST.MFにメインクラスが追加された。

実行時エラー その2 固める際の忘れもの

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication

今度はどうやらSpring bootを起動させるための資材が見当たらない模様。っていうかjarの中身確認したら、その他必要な依存ライブラリjarが1個も入ってないやん。

依存パッケージをすべてパッケージングするようpomを書き変えてmvnを再実行。

  
  
    
      ...
      
        org.apache.maven.plugins
        maven-assembly-plugin
        
          
            jar-with-dependencies
          
          
            
              net.rizworks.app.MyBatchApplication
            
          
        
        
          
            make-myapp-jar
            package
            
              single
            
          
        
      
      ...

goalなどの記載はmaven-assembly-pluginの仕様に従う。これで1つのjarの中に必要なライブラリがすべて固まった。

 

実行時エラー その3 それでもやっぱり動かない

2019/03/05 13:35:58.963 [DEBUG ] 
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::
...
...
...
2019/03/05 13:35:59.342 [ERROR ] o.s.b.SpringApplication Application run failed
java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.

えー。ダメかよ・・・。なんでだろ・・・?ってところでそもそも論に気付く。

pomに書かれてるはずのspring-boot-maven-pluginでspring bootアプリケーションってjar化するんじゃ・・・?なんで当初記載のなかったmaven-jar-pluginが使われてしまってたんだろう。

調べた結果、mvn実行時にspring-boot-maven-pluginを指定する方法があった。


    org.springframework.boot
    spring-boot-maven-plugin
    
    
      
        
          repackage
        
      
    
    
  

spring-bootのmavenプラグインに実行指定を追加。
たったこれだけ。これだけでSpring bootアプリ起動しました。
さすがSpring boot。よくできてる。
その1、その2で追加したPluginの記載とかまったくいらんかったです。すいません。

ってことでSpring boot / Mavenの再学習終了の巻。

コメントを残す

メールアドレスが公開されることはありません。