1. 程式人生 > >Maven+Spring framework生成的可執行jar檔案執行異常

Maven+Spring framework生成的可執行jar檔案執行異常

參考:http://www.cnblogs.com/lhj588/archive/2012/03/23/2414318.html

注意:驗證通過;

環境:

使用maven建立一個java project,利用Spring framework開發一個java程式,使用maven assembly生成一個可執行jar包。

異常:

在使用java -jar test.jar命令執行jar檔案時,出現下面幾種異常:

1、獲取xsd方案文件異常:

log:

15:17:56,797  INFO FileSystemXmlApplicationContext:510 - Refreshing org.[email protected]
1f2e95f: startup date [Thu Sep 17 15:17:56 CST 2015]; root of context hierarchy 15:17:56,840 INFO XmlBeanDefinitionReader:317 - Loading XML bean definitions from file [G:\applicationContext.xml] 15:17:58,065 WARN XmlBeanDefinitionReader:48 - Ignored XML validation warningorg.xml.sax.SAXParseException; lineNumber: 11; columnNumber: 114; schema_reference.4: 無法讀取方案文件 'http://www.springframework.org/schema/beans/spring-beans-4.1.xsd', 原因為 1) 無法找到文件; 2) 無法讀取文件; 3) 文件的根元素不是 <xsd:schema>。

分析:

a) 本地沒有該檔案;(為什麼會沒有?這是根源)

b) 而網路不通;(直接原因)

2、

Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException:


Configuration problem: Unable to locate Spring NamespaceHandler
for XML schema namespace [http://www.springframework.org/schema/context]
at org.springframework.beans.factory.parsing.FailFastProblemReporter.
error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.
error(BeanDefinitionParserDelegate.java:284)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.
parseCustomElement(BeanDefinitionParserDelegate.java:1332)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.
parseCustomElement(BeanDefinitionParserDelegate.java:1325)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.
parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.
registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93)....
原因分析:

用壓縮工具開啟生成的jar包,發現包中目錄/META-INF/中的檔案spring.handlers和spring.schemas都為空。

原來是在打包過程中,所有依賴包都會把各自/META-INF/目錄下的所有檔案拷貝到新jar包中的/META-INF目錄下,而有多個依賴包中都有/META-INF/spring.handlers和spring.schemas檔案,導致這兩個檔案被覆蓋成空檔案。

解決方案:

在拷貝META-INF目錄下的檔案時,這些重名的檔案不允許被覆蓋,而應該採用追加的方式進行合併。


操作步驟:

1、在src/main/resources目錄下新建META-INF目錄;

2、在src/main/resources/META-INF目錄下新建檔案:MANIFEST.MF, spring.handlers, spring.schemas;

3、在pom.xml檔案中新增如下配置:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass> com.test.mainClass </mainClass> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.handlers</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer> </transformers> <shadedArtifactAttached>true</shadedArtifactAttached> <!-- optional --> <shadedClassifierName>executable</shadedClassifierName> </configuration> </execution> </executions> </plugin>

 注意:com.test.mainClass表示可執行程式的入口,需要根據工程實際進行配置。

4、使用maven assembly工具生成可執行的jar包;

5、執行:java -jar test.jar即可。




相關推薦

Maven+Spring framework生成執行jar檔案執行異常

參考:http://www.cnblogs.com/lhj588/archive/2012/03/23/2414318.html 注意:驗證通過; 環境: 使用maven建立一個java project,利用Spring framework開發一個java程式,使用mave

Spring Boot Maven 打包執行Jar檔案

Maven pom.xml 必須包含<packaging>jar</packaging> <build> <plugins> <plugin> <groupId>org.sprin

聚合maven+spring-boot打包執行jar

.so mave 一個 route source 兩種 惡心 兩種方法 color 整整搞了一天,終於解決這個問題了。這裏是四個module,module之間存在依賴,打包兩個可執行jar,看下最終效果吧 聚合maven+spring-boot的搭建很

Maven專案打包成執行jar檔案和外種配置方式(引用第三方jar)

http://blog.csdn.net/zhangdaiscott/article/details/6911640 方法一. mvn assembly 或 mvn package (一個jar包) 把依賴包和自己專案的檔案打包如同一個jar包(這種方式對sp

Maven專案打包成執行jar檔案(引用第三方jar)

http://blog.csdn.net/zhangdaiscott/article/details/6911640 方法一. mvn assembly 或 mvn package (一個jar包) 把依賴包和自己專案的檔案打包如同一個jar包(這種方式對spring的專案

Spring-boot生成執行jar

弄一個可執行檔案耗費了一上午的時間,確實挺鬱悶的。把除錯過程中遇到的一些問題記錄一下 pom.xml 配置 <?xml version="1.0" encoding="UT

使用Maven將java專案匯出成執行.jar檔案

前言 最近想把eclispe中的java專案做成可執行的jar檔案,這樣就可以像用軟體一樣點選直接使用了。不過,pom.xml要注意的細節很多,自己對Maven也不是很懂,實現這個想法遇到幾個坑,還好最後所有坑都跳過去了,記錄一下以免以後自己再次跳坑。 本文

Eclipse匯出執行Java工程/執行Jar檔案(包含第三方Jar包)

1. 首先,右鍵你的Java工程,選擇Export,在Java資料夾下選擇Runnable JAR file,如下圖所示: 2. 選擇Runnable JAR file後,會彈出如下所示的對話方塊,選擇好匯出路徑後,預設Finish其實就可以了。但是需要注意的是兩點:

上傳檔案jar包 + 簡單的執行 jar 檔案包製作

最近公司ftp 上傳有點問題,老是會出錯,為了保證上傳的準確性(有時候釋出版本需要先上傳ftp),特意做了一個上傳的jar demo。 基本邏輯:  上傳檔案  並記錄檔名, 之後下載剛才上傳的檔案, 對比上傳和下載的MD5值, 之後刪除本地下載的臨時檔案。

springboot採用Docker容器化,實現執行jar檔案編譯成映象以及映象的釋出

作者:ydw_武漢聯絡方式:[email protected]前言:Docker是一個linux的容器管理工具,在現在的架構中,使用非常普遍,它允許使用者把容器映象推送到一個公共的庫或者是私有的映象庫中,使用也方便,對於之前專案的部署為了部署環境的統一也很麻煩,現在

springboot打包成執行Jar檔案教程

        <plugin>              <groupId>org.apache.maven.plugins</groupId>              <artifactId>maven-jar-plugin</artifactI

匯出執行jar檔案注意事項

如果專案引入了 第三方jar包,library  handing 下面的選項不要選:copy required libraries into a sub-folder next to the generated JAR, 會將第三方jar包複製到XX_lib檔案下。xx為匯

執行jar檔案轉換exe

這篇文章請允許我囉嗦幾句,講一下前因後果。 起因: 1.檢視生產日誌(巨大:大都是一兩個GB),使用普通編輯器開啟巨慢無比 2.手寫java工具類,使用main方法進行分割 3.覺得工具類不人性化,就加入GUI 4最後就想整合一個更加通用的工具,就想著把jar轉換為exe檔案

eclipse利用Fat Jar 外掛打包執行jar檔案

1.介紹 一個非常簡單的軟體打包解決方案,它利用 Java 的定製類裝入器,動態地從單一檔案檔案中裝入應用程式所有的類,同時保留支援 JAR 檔案的結構。隨著 FatJar Eclipse 外掛 FJEP 的推出, Eclipse 的使用者現在只要在嚮導中選中一個複選框,就可以建立 One-JA

Eclipse 匯出執行Jar檔案(工程)(包含第三方Jar包)

背景:寫了一個小功能的專案,要匯出可執行的jar包,但是專案中匯入驅動資料庫的包;包含有第三方jar包;但是網上很多方法在打包之前先在工程目錄下建立一個名字為MANIFEST.MF;本人不愛寫,覺得太麻

0066 Linux中多個Java檔案打包成單個執行jar檔案及其manifest.mf檔案編寫規則

現在我有三個Java類檔案:GuessGame.java Player.java GameLauncher.java(含主函式) 先用編譯命令: javac GuessGame.java Player

使用intellij idea製作執行jar檔案

可執行jar檔案 一個可執行的 jar檔案是一個自包含的 Java 應用程式,它儲存在特別配置的 JAR 檔案中,可以由 JVM 直接執行它而無需事先提取檔案或者設定類路徑。要執行儲存在非可執行的 JAR 中的應用程式,必須將它加入到您的類路徑中,並用名字呼叫

利用nohup後臺執行jar檔案包程式

Linux 執行jar包命令如下: 方式一: java -jar XXX.jar特點:當前ssh視窗被鎖定,可按CTRL + C打斷程式執行,或直接關閉視窗,程式退出 那如何讓視窗不鎖定? 方式二 java -jar XXX.jar &&代表在後臺執行。 特定:當前ssh視窗不被鎖

執行jar檔案---如何呼叫jar包內的配置檔案

這段時間隨便寫了一個小工具,一直用ide工具跑比較麻煩,試圖將工具打包成jar 利用cmd  java -jar test.jar 去執行這個工具發現 log4j 的配置檔案沒找到。 如上圖,我打成jar以後 我在 ide工具內 程式碼 如下圖 this.

springboot打包好的Jar檔案執行時引用外部的配置檔案

去Interview時被問了這個問題,之前都是直接在idea裡改好再打包了,所以沒有直接引用外部檔案過,通過檢視SpringBoot官網,得知有下面的幾種方法: 24.3 Application Property Files SpringApplication loads