最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot解決no main manifest attribute錯(cuò)誤

 更新時(shí)間:2024年09月11日 11:20:30   作者:圓師傅  
在開(kāi)發(fā)Springboot項(xiàng)目時(shí),使用java -jar命令運(yùn)行jar包可能出現(xiàn)no main manifest attribute錯(cuò)誤,本文就來(lái)介紹一下該錯(cuò)誤的解決方法,感興趣的可以了解一下

0. 背景

在開(kāi)發(fā)Spring boot項(xiàng)目的時(shí)候,有時(shí)候會(huì)需要使用java -jar test-1.0-SNAPSHOT.jar指令來(lái)運(yùn)行開(kāi)發(fā)的java應(yīng)用,但是很不幸,會(huì)遇到這樣的錯(cuò)誤

no main manifest attribute, in test-1.0-SNAPSHOT.jar

為什么會(huì)產(chǎn)生這樣的錯(cuò)誤呢?如何解決呢?

1. java程序如何運(yùn)行

在接觸java開(kāi)發(fā)的第一天,我們就知道,在編寫(xiě)完Java程序之后

public class Hello { 
    public static void main(String[] args) { 
        System.out.println("Hello World"); 
    }
}

需要使用指令將.java文件編譯成class文件

javac Hello.java

然后就可以使用命令就可以執(zhí)行這個(gè)Java程序

java Hello                          
Hello World         

程序運(yùn)行的入口是main方法,當(dāng)我們使用java Hello命令,虛擬機(jī)就可以根據(jù)Hello.class文件中的main方法,來(lái)運(yùn)行程序。但是使用的 java -jar 指令是如何使程序運(yùn)行起來(lái)的呢?

2. jar是什么

JAR(Java Archive)文件是一種打包文件格式,它允許你將多個(gè) Java 類文件、相關(guān)的元數(shù)據(jù)和資源(如文本、圖片等)打包到一個(gè)單一的文件中,以便于分發(fā)和部署。

JAR中包含了類文件,元數(shù)據(jù)和資源。類文件和資源文件很清楚,那元數(shù)據(jù)是什么呢?
元數(shù)據(jù)主要指的是清單文件(MANIFEST.MF) ,這是一個(gè)可選文件,用來(lái)提供關(guān)于jar文件的額外信息。清單文件的主要功能:

  • 指定主類:在清單文件中,可以指定包含main方法的類,這是Java應(yīng)用程序的入口點(diǎn)。這允許用戶通過(guò)java -jar命令直接運(yùn)行JAR文件。

  • 定義屬性:清單文件可以包含屬性,這些屬性可以是鍵值對(duì)的形式,用于存儲(chǔ)關(guān)于JAR文件的額外信息,比如版本號(hào)、作者信息等。

  • 指定類路徑:在清單文件中可以定義類路徑(Class-Path)屬性,指定在運(yùn)行JAR文件時(shí)需要包含的其他JAR文件或目錄。

  • 安全設(shè)置:清單文件可以包含安全相關(guān)的設(shè)置,比如指定需要哪些權(quán)限。

  • 擴(kuò)展名映射:可以定義文件擴(kuò)展名到類名的映射,這樣當(dāng)運(yùn)行具有特定擴(kuò)展名的文件時(shí),JAR文件中的特定類將被用來(lái)處理這些文件。

  • 其他自定義信息:開(kāi)發(fā)者可以根據(jù)需要在清單文件中添加自定義的元數(shù)據(jù)。

這里可以解壓一個(gè)jar來(lái)看一下:
這里解壓一下spring-core-5.3.27.jar來(lái)看一下,jar中有什么內(nèi)容:

在這里插入圖片描述

這里可以看到,org目錄下,放的就是類文件,META-INF放的就是資源文件:

在這里插入圖片描述

這里再看一下MANIFEST. MF里的內(nèi)容

Manifest-Version: 1.0
Implementation-Title: spring-core
Automatic-Module-Name: spring.core
Implementation-Version: 5.3.27
Created-By: 1.8.0_345 (Oracle Corporation)
Dependencies: jdk.unsupported

Manifest-Version 表示清單文件的版本。
Created-By 表示創(chuàng)建JAR文件的Java版本和提供者。
Permissions 指定了JAR文件的權(quán)限。

這個(gè)文件中沒(méi)有包含指定main的方法,一般這樣添加:

Main-Class: com.example.MainApp

3. java -jar test-1.0-SNAPSHOT.jar:

這樣已經(jīng)可以知道,java -jar就是去找指定jar包里的main方法來(lái)執(zhí)行,如何找main方法?根據(jù)MANIFEST.MF中的Main-Class類來(lái)找。

遇到的錯(cuò)誤是沒(méi)有no main manifest attribute,那就打開(kāi)看一下。

Manifest-Version: 1.0  
Implementation-Title: test  
Implementation-Version: 1.0-SNAPSHOT  
Build-Jdk-Spec: 1.8  
Created-By: Maven JAR Plugin 3.2.2  

這里沒(méi)有這個(gè)main attribute,那如何添加這個(gè)attribute呢?
以上面的Hello.java為例,來(lái)手動(dòng)打一個(gè)jar包。先編寫(xiě)這個(gè)MANIFEST. MF

Manifest-Version: 1.0     
Build-Jdk-Spec: 1.8     
Main-Class: Hello  

這樣再使用這個(gè)文件打一個(gè)jar包:

jar cvfm test-hello.jar MANIFEST.MF .  

這里的參數(shù)作用是

  • c:創(chuàng)建新的 JAR 文件。
  • v:在打包過(guò)程中顯示詳細(xì)輸出。
  • f:后面跟著的是要?jiǎng)?chuàng)建的 JAR 文件的名稱。
  • m:指定清單文件的名稱。

這個(gè)時(shí)候就可以使用java -jar愉快的玩耍了。
那上面Springboot程序如何添加這個(gè)程序執(zhí)行入口呢?

4. 添加執(zhí)行入口

這里的程序打包是使用的maven,那就使用maven的插件來(lái)完成就好了!
在pom文件中添加如下插件:

<build> 
    <plugins> 
      <plugin> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-maven-plugin</artifactId>

        <executions> 
          <execution> 
            <goals> 
              <goal>repackage</goal> 
            </goals> 
          </execution> 
        </executions> 
      </plugin> 
    </plugins> 
  </build> 

這個(gè)時(shí)候,再使用mvn package指令,就可以得到一個(gè)可以正確執(zhí)行的jar包了。直接java -jar test-1.0-SNAPSHOT.jar愉快玩耍。

到此這篇關(guān)于Springboot解決no main manifest attribute錯(cuò)誤的文章就介紹到這了,更多相關(guān)Springboot no main manifest attribute內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring session實(shí)現(xiàn)Session共享

    Spring session實(shí)現(xiàn)Session共享

    本文主要介紹了Spring session實(shí)現(xiàn)Session共享,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java 歸并排序算法、堆排序算法實(shí)例詳解

    Java 歸并排序算法、堆排序算法實(shí)例詳解

    這篇文章主要介紹了Java 歸并排序算法、堆排序算法實(shí)例詳解,需要的朋友可以參考下
    2017-05-05
  • SpringCache緩存處理詳解

    SpringCache緩存處理詳解

    這篇文章主要介紹了SpringCache緩存處理詳解,SpringCache是一個(gè)框架,實(shí)現(xiàn)了基于注解緩存功能,只需要簡(jiǎn)單地加一個(gè)注解,就能實(shí)現(xiàn)緩存功能,需要的朋友可以參考下
    2023-09-09
  • Mybatis插件擴(kuò)展及與Spring整合原理分析

    Mybatis插件擴(kuò)展及與Spring整合原理分析

    這篇文章主要介紹了Mybatis插件擴(kuò)展及與Spring整合原理,本文通過(guò)實(shí)例文字相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java中Stream?Filter多條件篩選過(guò)濾代碼舉例

    Java中Stream?Filter多條件篩選過(guò)濾代碼舉例

    這篇文章主要給大家介紹了關(guān)于Java中Stream?Filter多條件篩選過(guò)濾的相關(guān)資料,Java Stream中的filter方法可以使用多個(gè)條件來(lái)過(guò)濾數(shù)據(jù),文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-12-12
  • Java注解Annotation原理及自定義注解代碼實(shí)例

    Java注解Annotation原理及自定義注解代碼實(shí)例

    這篇文章主要介紹了Java注解Annotation原理及自定義注解代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • java 中JFinal getModel方法和數(shù)據(jù)庫(kù)使用出現(xiàn)問(wèn)題解決辦法

    java 中JFinal getModel方法和數(shù)據(jù)庫(kù)使用出現(xiàn)問(wèn)題解決辦法

    這篇文章主要介紹了java 中JFinal getModel方法和數(shù)據(jù)庫(kù)使用出現(xiàn)問(wèn)題解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 使用Java對(duì)URL進(jìn)行編碼和解碼

    使用Java對(duì)URL進(jìn)行編碼和解碼

    在互聯(lián)網(wǎng)應(yīng)用中,URL(Uniform?Resource?Locator,統(tǒng)一資源定位符)是定位和訪問(wèn)網(wǎng)絡(luò)資源的重要標(biāo)識(shí),然而,URL?中可能包含一些特殊字符,為了保證?URL?的有效性和兼容性,必須對(duì)?URL?進(jìn)行編碼處理,所以本文給大家介紹了如何使用Java對(duì)URL進(jìn)行編碼和解碼
    2025-03-03
  • 實(shí)現(xiàn)Java刪除一個(gè)集合的多個(gè)元素

    實(shí)現(xiàn)Java刪除一個(gè)集合的多個(gè)元素

    Java中的For each實(shí)際上使用的是iterator進(jìn)行處理的。而iterator是不允許集合在iterator使用期間刪除的。而我在for each時(shí),從集合中刪除了一個(gè)元素,這導(dǎo)致了iterator拋出了ConcurrentModificationException,下面來(lái)看看到底怎么回事。
    2016-08-08
  • Java SpringBoot自動(dòng)裝配原理詳解及源碼注釋

    Java SpringBoot自動(dòng)裝配原理詳解及源碼注釋

    SpringBoot的自動(dòng)裝配是拆箱即用的基礎(chǔ),也是微服務(wù)化的前提。其實(shí)它并不那么神秘,我在這之前已經(jīng)寫(xiě)過(guò)最基本的實(shí)現(xiàn)了,大家可以參考這篇文章,來(lái)看看它是怎么樣實(shí)現(xiàn)的,我們透過(guò)源代碼來(lái)把握自動(dòng)裝配的來(lái)龍去脈
    2021-10-10

最新評(píng)論

淮北市| 临猗县| 星座| 栾川县| 惠安县| 始兴县| 祥云县| 五河县| 富锦市| 绥江县| 武邑县| 吉木萨尔县| 威信县| 宝清县| 府谷县| 丹寨县| 曲阜市| 卢氏县| 收藏| 南江县| 汽车| 木兰县| 蒙山县| 新晃| 呼伦贝尔市| 平果县| 裕民县| 芮城县| 永顺县| 苍梧县| 自贡市| 巴楚县| 社会| 玉树县| 奇台县| 东兰县| 息烽县| 佛坪县| 长宁县| 邵阳县| 鱼台县|