maven項(xiàng)目錯(cuò)誤:找不到或無(wú)法加載主類(lèi)?XXX問(wèn)題
maven項(xiàng)目錯(cuò)誤:找不到或無(wú)法加載主類(lèi) XXX
今天在接手一個(gè)項(xiàng)目的時(shí)候
運(yùn)行main類(lèi)報(bào)了這個(gè)錯(cuò) 錯(cuò)誤: 找不到或無(wú)法加載主類(lèi) XXX 經(jīng)過(guò)好一番查證才找出了問(wèn)題所在
原因是
maven項(xiàng)目的<scope>provided</scope>
導(dǎo)致的,現(xiàn)在記錄一下。
測(cè)試代碼
import org.apache.flink.table.functions.ScalarFunction; public class Test extends ScalarFunction { public static void main(String[] args) { System.out.println("test"); } }
該類(lèi)繼承了flink的ScalarFunction,但是maven的pom.xml文件是這么寫(xiě)的依賴(lài);
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-table-planner_2.11</artifactId> <version>1.8.3</version> <scope>provided</scope> </dependency>
問(wèn)題就出在了<scope>provided</scope>
上,
經(jīng)查找官網(wǎng)得知,具有此范圍的依賴(lài)項(xiàng)會(huì)添加到用于編譯和測(cè)試的類(lèi)路徑中,但不會(huì)添加到運(yùn)行時(shí)類(lèi)路徑中,交由JDK 或容器在運(yùn)行時(shí)提供依賴(lài)項(xiàng)。
因此本地運(yùn)行的時(shí)候就報(bào)了 找不到或無(wú)法加載主類(lèi),而放在服務(wù)器,因?yàn)槿萜髟谶\(yùn)行時(shí)提供依賴(lài)項(xiàng),所以運(yùn)行沒(méi)問(wèn)題。
官網(wǎng)地址:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#
遇到問(wèn)題要逐步分析,分解問(wèn)題,鎖定問(wèn)題根源;另外要多看官網(wǎng)文檔!
maven 項(xiàng)目常見(jiàn)錯(cuò)誤解決
編譯錯(cuò)誤
由于 jdk 編譯級(jí)別設(shè)定不匹配,導(dǎo)致代碼編譯錯(cuò)誤。
idea 創(chuàng)建的 maven 項(xiàng)目,默認(rèn)使用 jdk1.5 的版本進(jìn)行編譯,會(huì)導(dǎo)致編譯失敗。
Error:java: Compilation failed: internal java compiler error
解決辦法:
修改 pom.xml 文件,增加 maven 編譯插件配置
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
jar中沒(méi)有主清單屬性
maven 編譯插件編譯后生成的 jar,如果通過(guò) java -jar 命令直接運(yùn)行,有可能出現(xiàn) ***.jar 中沒(méi)有主清單屬性
解決辦法:
使用 maven-shade-plugin 打包插件,配置上 main class 位置
<build> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.0</version> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <minimizeJar>false</minimizeJar> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>Application</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
運(yùn)行出錯(cuò)的配置清單文件 META-INF/MANIFEST.MF
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: dataojo Created-By: Apache Maven 3.5.4 Build-Jdk: 1.8.0_131
運(yùn)行正常的配置清單文件 META-INF/MANIFEST.MF
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: dataojo Created-By: Apache Maven 3.5.4 Build-Jdk: 1.8.0_131 Main-Class: Application
通過(guò)對(duì)比錯(cuò)誤與正常的配置清單文件,可以發(fā)現(xiàn),運(yùn)行錯(cuò)誤的清單文件中缺少 Main-Class 屬性參數(shù)配置,增加該屬性后,既可正常運(yùn)行
附件: 通用 mvn 打包配置
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.0</version> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <minimizeJar>false</minimizeJar> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>Application</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA 工程里 new不出來(lái)Vue文件的圖文解決方案
這篇文章主要介紹了IDEA 工程里 new不出來(lái)Vue文件的解決方案,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03java super關(guān)鍵字知識(shí)點(diǎn)詳解
在本篇文章里小編給大家整理的是一篇關(guān)于java super關(guān)鍵字知識(shí)點(diǎn)詳解內(nèi)容,有興趣的朋友們可以參考下。2021-01-01springboot2.x只需兩步快速整合log4j2的方法
這篇文章主要介紹了springboot2.x只需兩步快速整合log4j2的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05java編程無(wú)向圖結(jié)構(gòu)的存儲(chǔ)及DFS操作代碼詳解
這篇文章主要介紹了java編程無(wú)向圖結(jié)構(gòu)的存儲(chǔ)及DFS操作代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-12-12Mybatis和Mybatis-Plus時(shí)間范圍查詢(xún)方式
這篇文章主要介紹了Mybatis和Mybatis-Plus時(shí)間范圍查詢(xún)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java使用正則表達(dá)式檢索、替換String中特定字符和正則表達(dá)式的一切
這篇文章主要給大家介紹了關(guān)于Java使用正則表達(dá)式檢索、替換String中特定字符和正則表達(dá)式的一切,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09GSON實(shí)現(xiàn)Java對(duì)象的JSON序列化與反序列化的實(shí)例教程
GSON是Google開(kāi)發(fā)并開(kāi)源的一個(gè)Java的JSON轉(zhuǎn)換庫(kù),這里我們將來(lái)講解GSON實(shí)現(xiàn)Java對(duì)象的JSON序列化與反序列化的實(shí)例教程,需要的朋友可以參考下2016-06-06java Date裝成英文String后,無(wú)法再轉(zhuǎn)回Date的解決方案
本文介紹了java Date裝成英文String后,無(wú)法再轉(zhuǎn)回Date的解決方案。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01Java數(shù)據(jù)結(jié)構(gòu)之圖的路徑查找算法詳解
這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)中圖的路徑查找算法,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-11-11