Spring Boot jarにメイン・マニフェスト属性がありませんを解決する方法 ホームページ制作 | 墨田区

Spring Boot jarにメイン・マニフェスト属性がありませんを解決する方法

LINEで送る
Pocket

Spring Bootで開発したアプリケーションを jar 起動した場合、「アプリ名.jarにメイン・マニフェスト属性がありません」というエラーが出た場合に解決する方法です。
Spring Boot jarにメイン・マニフェスト属性がありませんを解決する方法

これは作成された jar ファイル内の META-INF/MANIFEST.MF に、Main-Class の指定がないことで起こるエラーです。エラー自体は Spring Boot に特化したものではありませんが、Spring Boot でパッケージしたときに発生したので、こんなタイトルになっています。

実は Spring Boot で開発したアプリを jar で起動できるようにするには、pom.xml に色々書かないといけません。

ここでは Spring Boot で開発したアプリケーションを jar 起動できるところまで掲載しておきます。




【PR】マジか?!「アレ」してるLINEスタンプっていったい・・・


環境

Spring Boot 1.4.1
Thymeleaf 3.0.2
Windows7
Java8
Eclipse 4.6 Neon

こちらのページを参考にサンプルアプリを作ってください。既に何がしかのアプリがある場合は、読み飛ばして結構です。
Spring Bootを使ってWebアプリを作る方法

MANIFEST.MFにMain-Class指定を追加

pom.xml の plugins に下記を追加します。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
  <archive>
    <manifest>
      <addClasspath>true</addClasspath>
      <addExtensions>true</addExtensions>
      <mainClass>springbootapp.App</mainClass>
      <classpathPrefix>lib</classpathPrefix>
    </manifest>
  </archive>
</configuration>
</plugin>

mainClass に「@SpringBootApplication」アノテーションを付与したクラス名を書きます。

このままビルドして jar 実行しても次のエラーが出ます。
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
        at springbootapp.App.main(App.java:11)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more

これは Spring 関係のクラスが見つからないために発生しているエラーです。jar を解凍してみるとわかりますが、Spring 関係のライブラリはパッケージされていないのです。

解決するには pom.xml に下記を追加します。
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
</plugin>

maven-shade-plugin を利用することで、依存するライブラリも含んだ jar を作成することができます。

pom.xml の全文はこうです。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>helloworldboot</groupId>
  <artifactId>springbootapp</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>springbootapp</name>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.1.RELEASE</version>
  </parent>
  <properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
    <thymeleaf-layout-dialect.version>2.0.5</thymeleaf-layout-dialect.version>
    <thymeleaf-extras-springsecurity4.version>3.0.2.RELEASE</thymeleaf-extras-springsecurity4.version>
    <thymeleaf-extras-data-attribute.version>2.0.5</thymeleaf-extras-data-attribute.version>
    <thymeleaf-extras-java8time.version>3.0.2.RELEASE</thymeleaf-extras-java8time.version>
  </properties>
  <build>
    <finalName>springbootapp</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <addClasspath>true</addClasspath>
              <addExtensions>true</addExtensions>
              <mainClass>springbootapp.App</mainClass>
              <classpathPrefix>lib</classpathPrefix>
            </manifest>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
  </dependencies>
</project>

再度 jar を起動してみると・・・
C:\Eclipse\4.6\workspace\springbootapp>java -jar target/springbootapp.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::       (v0.0.1-SNAPSHOT)

2016-11-22 13:39:36.339  INFO 6468 --- [           main] springbootapp.App

おおお、無事起動できましたね^^

参考サイト

spring – java.lang.ClassNotFoundException org.springframework.boot.SpringApplication Maven – Stack Overflow

まとめ

Eclipse 上でアプリを動かしている際には全然気が付かなかったのですが、いざ jar に固めて実行してみると動かず・・・。ちょっと焦りましたよ^^;

まぁ、よく考えれば当たり前のことなんですけど。開発中は気が付けないものですね。

同じ現象で困った方のお役にたてればうれしいです。

おすすめ書籍 – 私はこの書籍1冊で Spring Boot を習得できました^^

SpringBootプログラミング入門

新品価格
¥3,024から



おつかれさまでした。

LINEで送る
Pocket

この記事がお役に立ちましたら シェア をお願いいたします。

Javaの勉強が思うように進まないときは!

Javaの勉強が思うように進まないのであれば、プロに直接質問ができる プログラミングスクール を検討してみてはいかがでしょうか?プログラミングスクールに申し込めば、短期間で一定のスキルを身に着けることができます!

Javaコースあり!オンライン完結型 テックアカデミー TechAcademy [テックアカデミー]

どこかに通う必要なく、自宅でプログラミングやアプリ開発を学ぶことができるのが特徴のスクールです。未経験からプロになるまで最短4週間という、超短期集中型の学習ができます。年齢層は10代〜40代の男女が中心で、学引があり多くの学生が受講しているそうですよ。オンラインで受講ができるスクールですので、全国どこからでも学習ができますね。

更にさらに、パーソナルメンターにチャット質問できちゃうんです!!

これは素晴らしいことですよ!ハマったり困ったことが起こるのがプログラミングの世界。知っている誰かに聞けば数分で解決することが、自分だけだと何時間もかかったりしますから!いや、これホントですよ。

しかし、便利な世の中になりましたよねー。一昔前ではオンラインで学習できるなんて、思いもよりませんでしたから。講師もバリバリのエンジニアですので、現場で使えるスキルを教えてもらえます。なんとも素晴らしいスクールがあったものですね。学割を使えば社会人より半額以下で受講できますから、学生さんには超おすすめです。

これから Java プログラミングを勉強して、将来はプログラマーとして活躍したいと思っている方には、就職保証付きJavaエンジニアコース というのがおすすめです。就職先まで保証してくれるとなれば、もう安心して学習に専念できますね。夢への第一歩はここから始まるのかも。あ、将来はライバルですね^^

オンラインスクールですから営業エリアは全国です。
気になる方は一度チェックしてみてください。無料の動画説明会も常時開催していますよ。


Javaコースあり!未経験者にウケてる KENスクール パソコンスクール・パソコン教室 【KENスクール】個別指導のWeb-DTP・OA・IT PCスクール

理解度や学習ペースに合わせて、一人ひとりが納得して前進できる授業を提供してくれるのが特徴です。特に課題製作は現場さながらで、実務に即したものとなっていますので短期でのスキルアップが望めます。自宅学習のサポートも充実していて、授業内容をいつでもビデオで振り返ることができるのもうれしいですね。好きな時間に好きな場所で、無理なくスケジューリングできるので、仕事の忙しい方でも柔軟に学ぶことができますよ。

更にさらに、なんと 就職サポート をしてくれるというのですから驚きです!!

履歴書の書き方から面接指導、求人の紹介など、具体的な就職先まで提案してくれるんです!私も「もっと早く出会いたかったなぁー、こんなスクール」・・・って思っちゃいました^^

東京・神奈川・愛知・大阪を営業エリアとされています。
まずは気軽に 無料体験予約 に申し込んでみるのもアリですよ。


コメントを残す

お名前 (必須)
メールアドレス
(アドレスは公開されません)

コメント(必須)

Trackback URL