Maven打包方式,以及jar包衝突問題的解決方法
一、打包方式:
Maven可以使用mvn package指令對專案進行打包,如果使用Java -jar xxx.jar執行執行jar檔案,會出現"no main manifest attribute, in xxx.jar"(沒有設定Main-Class)、ClassNotFoundException(找不到依賴包)等錯誤。
要想jar包能直接通過java -jar xxx.jar執行,需要滿足:
1、在jar包中的META-INF/MANIFEST.MF中指定Main-Class,這樣才能確定程式的入口在哪裡;
2、要能載入到依賴包。
使用Maven有以下幾種方法可以生成能直接執行的jar包,可以根據需要選擇一種合適的方法。
方法一:使用maven-jar-plugin和maven-dependency-plugin外掛打包
在pom.xml中配置:
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
-
<version>
- <configuration>
- <archive>
- <manifest>
- <addClasspath>true</addClasspath>
- <classpathPrefix>lib/</classpathPrefix>
-
<mainClass
- </manifest>
- </archive>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.10</version>
- <executions>
- <execution>
- <id>copy-dependencies</id>
- <phase>package</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <outputDirectory>${project.build.directory}/lib</outputDirectory>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
maven-jar-plugin用於生成META-INF/MANIFEST.MF檔案的部分內容,<mainClass>com.xxg.Main</mainClass>指定MANIFEST.MF中的Main-Class,<addClasspath>true</addClasspath>會在MANIFEST.MF加上Class-Path項並配置依賴包,<classpathPrefix>lib/</classpathPrefix>指定依賴包所在目錄。
例如下面是一個通過maven-jar-plugin外掛生成的MANIFEST.MF檔案片段:
- Class-Path: lib/commons-logging-1.2.jar lib/commons-io-2.4.jar
- Main-Class: com.xxg.Main
只是生成MANIFEST.MF檔案還不夠,maven-dependency-plugin外掛用於將依賴包拷貝到<outputDirectory>${project.build.directory}/lib</outputDirectory>指定的位置,即lib目錄下。
配置完成後,通過mvn package指令打包,會在target目錄下生成jar包,並將依賴包拷貝到target/lib目錄下,目錄結構如下:
指定了Main-Class,有了依賴包,那麼就可以直接通過java -jar xxx.jar執行jar包。
這種方式生成jar包有個缺點,就是生成的jar包太多不便於管理,下面兩種方式只生成一個jar檔案,包含專案本身的程式碼、資源以及所有的依賴包方法二:使用maven-assembly-plugin外掛打包
在pom.xml中配置:
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>2.5.5</version>
- <configuration>
- <archive>
- <manifest>
- <mainClass>com.xxg.Main</mainClass>
- </manifest>
- </archive>
- <descriptorRefs>
- <descriptorRef>jar-with-dependencies</descriptorRef>
- </descriptorRefs>
- </configuration>
- </plugin>
- </plugins>
- </build>
打包方式:
-
相關推薦
Maven打包方式,以及jar包衝突問題的解決方法
一、打包方式: Maven可以使用mvn package指令對專案進行打包,如果使用Java -jar xxx.jar執行執行jar檔案,會出現"no main manifest attribute, in xxx.jar"(沒有設定Main-Class)、
Jar包衝突解決方法
前言 對於Jar包衝突問題,我們開發人員經常都會有碰到,當我們使用一些jar包中的類、方法等,或者有時遇到一些日誌系統的問題(參考另一篇文章Jar包衝突導致的日誌問題),我們會遇到ClassNotFoundException,NoSuchFieldException,N
tomcat啟動報錯jar包衝突解決方法
從公司的原始碼庫中同步程式碼之後,再啟動tomcat,出現了下面兩張圖的狀況,由於之前的啟動環境是同事給配好的,因此這次打算靠自己解決了。 1、servlet.jar的問題 情景重現: 圖中已經標註出來,檢測servet.jar和servlet_old.jar包時遇到了
Maven實戰-由一次jar包衝突來詳述 Maven 依賴範圍及依賴調節原則
這篇文章的緣由是剛來搭建的專案有jar包衝突,報下面這個錯基本就是servlet-api包衝突無疑了 Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitia
Maven打包時引入本地jar包
<!--pom.xml-->..... <dependencies> <dependency> <groupId>com.xxxxxx</groupId> <artifactId>xx
maven專案jar包衝突解決方案
上圖中顯示的是servlet2.3而不是3.0。 解決方法: 網上都說servlet-api衝突是因為專案部署的時候WEB-INFO/lib下面的servlet-api和servlet中的servlet-api產生衝突,其實我的不然。因為我的專案是用maven管理的,在pom.
maven 打包Scala程式碼到jar包
注意:Scala程式碼要放到Scala目錄下,Java程式碼要放到Java目錄下,否則在打包中會被忽略 mvn clean package預設只處理java原始碼的編譯,打包,如果此時Scala程式碼
Maven jar包衝突解決辦法
下面兩個配置有簡潔的包依賴衝突: <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</ar
Maven的傳遞性依賴及其jar包衝突解決
一、Maven簡介 Maven是一個跨平臺的專案管理工具。作為Apache組織的一個頗為成功的開源專案,其主要服務於基於Java平臺的專案建立,依賴管理和專案資訊管理。 二、Maven的依賴管理 1
使用Maven打包能執行的Jar包
在pom.xml中新增 <properties> <project.build.sourceEncoding>UTF-8</project.build.s
Gradle 引用第三方庫,jar包衝突解決方案
一、使用exclude標籤 //RxTools工具類集合https://github.com/vondear/RxTools api 'com.github.vondear:RxTools:v1.7.6.4' //zxing第三方https://github
eclipse使用MAVEN打包可執行的jar包
1.新建maven工程 注意勾選 隨便填一下 建好之後工程目錄如下 新建測試類與工具類,主類很簡單 工具類也很簡單,就是初始化了日誌 maven依賴包也只有一個log4j的jar <dependencies> <dependency&
Missing artifact com.oracle:ojdbc7:jar:12.1.0.1. 配置maven.pom.xml,ojdbc.jar包出錯
最近oracle資料庫開發需要oracle版本為 12c,配置maven.pom.xml,ojdbc.jar包出錯 原因:maven的中央倉庫中沒有這個資源,只能通過配置本地庫才能載入到專案中去。 解決辦法: (前提是安裝好了maven) 方法步
maven打包找不到本地jar包的解決方法
有時候我們在專案中會引入一些本地jar包,在maven打包時會找不到這些jar,我們需要在pom.xml中的 <pluginManagement> <plugins&
Maven之jar包衝突解決
用了Maven之後,不得不說它是一個很好的用於專案構建,管理,jar包管理的工具,但是使用過程中,相信各位也遇到過jar衝突這種煩人的問題,特別是大專案,依賴的jar包比較多,很容易造成jar包衝突,jar包衝突的一個很大的原因即產類包之間的間接依賴引起的。每個顯式宣告的類包
maven打包時候將依賴jar包打入
Java的jar包太多了,有時候我們為了方便執行,希望把所有引用的jar包打包到一起。 <plugins> <plugin> <artifactId>maven-assembly-plug
maven JAR包衝突解決方案
前言 對於Jar包衝突問題,我們開發人員經常都會有碰到,當我們使用一些jar包中的類、方法等,或者有時遇到一些日誌系統的問題(參考另一篇文章Jar包衝突導致的日誌問題),我們會遇到ClassNotFoundException,NoSuchFieldException,NoSuchMethodExcept
maven 打包可運行jar包(轉)
cmd ive 加載 多個 build 滿足 ngs clas str 目錄 1、前提 2、方法一:使用maven-jar-plugin和maven-dependency-plugin插件打包 3、方法二:使用maven-assembly-plugin插件打包 4、方法三:
maven: 打包可執行的jar包(java application)及依賴項處理
IDE環境中,可以直接用exec-maven-plugin外掛來執行java application,類似下面這樣: 1 <plugin> 2 <groupId>org.codehaus.mojo</groupId> 3 <artifact
maven打包dubbo服務依賴jar包缺失問題
在dubbo服務對應的pom檔案中加入以下內容(install完以後會在pom.xml同級目錄生成dependency-reduced-pom.xml檔案不用管這是打包外掛自動生成的)<!--