maven插件maven-jar-plugin構(gòu)建jar文件的詳細(xì)使用
前言
maven-jar-plugin插件時(shí)maven中最常用的插件,也是maven構(gòu)建Java程序執(zhí)行包或者依賴(lài)包的默認(rèn)插件,大部分情況下我們不需要對(duì)其進(jìn)行配置,但在特殊情況下,我們可以通過(guò)配置來(lái)定制我們的jar包。
一、使用方式
大部分情況下,我們的配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> </plugin>
而且這里的版本號(hào)是可選的,如果不配置版本號(hào),maven會(huì)自動(dòng)去尋找最新的版本。
二、常用配置詳解
1.classesDirectory
這個(gè)表示class文件的目錄,默認(rèn)值是:${project.build.outputDirectory}也就是target目錄下的class目錄,當(dāng)然我們也可以指定其他目錄。
2.outputDirectory
表示jar文件的輸出目錄,默認(rèn)值是:${project.build.directory},就是target目錄,生成的jar文件就輸出到這里。
3.excludes
表示jar文件打包時(shí),需要排除哪些文件,比如我們?cè)陂_(kāi)發(fā)時(shí)有個(gè)dev.properties文件,打包時(shí)我們就不需要了,可以這樣配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <excludes> <exclude>conf/**</exclude> <exclude>bin/**</exclude> <exclude>cache/**</exclude> <exclude>attachment/**</exclude> <exclude>dev.properties</exclude> </excludes> </configuration> </plugin>
這里我們排除了部分文件夾和開(kāi)發(fā)時(shí)用到的文件,在打包時(shí)不加入到j(luò)ar文件中。
4.includes
這個(gè)與excludes相反,就是把需要的文件在打包時(shí)加入到j(luò)ar文件中,具體配置可以參照excludes的配置。
5.archive
這個(gè)屬性配置很多,主要是用于定制化我們的jar包結(jié)構(gòu)以及對(duì)Manifest文件的定制化。下面我們用幾個(gè)實(shí)例來(lái)演示。
添加Implementation和Specification屬性
默認(rèn)情況下面Manifest文件結(jié)構(gòu)如下:
Manifest-Version: 1.0 Created-By: Apache Maven ${maven.version} Build-Jdk: ${java.version}
我們可配置下面屬性:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <manifest> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> </manifest> </archive> </configuration> </plugin>
這樣生成的Manifest如下:
Manifest-Version: 1.0 Created-By: Apache Maven ${maven.version} Build-Jdk: ${java.version} Specification-Title: ${project.name} Specification-Version: ${project.artifact.selectedVersion.majorVersion}.${project.artifact.selectedVersion.minorVersion} Specification-Vendor: ${project.organization.name} Implementation-Title: ${project.name} Implementation-Version: ${project.version} Implementation-Vendor: ${project.organization.name}
添加manifestEntries
這個(gè)屬性可以添加一下項(xiàng)目信息到j(luò)ar文件中。常用配置如下:
<configuration> <archive> <manifestEntries> <mode>prod</mode> <url>${project.url}</url> </manifestEntries> </archive> </configuration>
生成的Manifest如下:
Manifest-Version: 1.0 Created-By: Apache Maven ${maven.version} Build-Jdk: ${java.version} mode: prod url: http://project.url.com
添加鍵值對(duì)屬性Manifest Sections
這個(gè)功能可以添加多個(gè)鍵值屬性,配置如下:
<archive> <manifestSections> <manifestSection> <name>value1</name> <manifestEntries> <id>key1</id> </manifestEntries> </manifestSection> <manifestSection> <name>value2</name> <manifestEntries> <id>key2</id> </manifestEntries> </manifestSection> </manifestSections> </archive>
結(jié)果如下:
Manifest-Version: 1.0
Created-By: Apache Maven ${maven.version}
Build-Jdk: ${java.version}
Name: value1
id: key1
Name: value2
id: key2
自定義manifest配置
可以根據(jù)下面的配置來(lái)定制化manifest文件的加載機(jī)制:
設(shè)置一個(gè)可執(zhí)行的jar文件
我們可以發(fā)布一個(gè)可執(zhí)行的jar文件,就是可以通過(guò)命令行來(lái)啟動(dòng)一個(gè)jar。也可以把一個(gè)jar文件當(dāng)做依賴(lài)庫(kù),提供給其他項(xiàng)目來(lái)使用。如果要發(fā)布一個(gè)可執(zhí)行的jar,配置如下:
<configuration> <archive> <manifest> <mainClass>com.test.Main</mainClass> </manifest> </archive> </configuration>
這里com.test.Main必須要有一個(gè)main方法
精確設(shè)置Classpath
就是將所有的jar文件全部枚舉出來(lái),配置如下:
<project> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> </manifest> </archive> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> </dependencies> </project>
Manifest生成結(jié)果如下:
Manifest-Version: 1.0
Created-By: Apache Maven ${maven.version}
Build-Jdk: ${java.version}
Class-Path: commons-io-2.11.0.jar commons-lang-2.1.jar
注意這樣運(yùn)行這個(gè)jar文件時(shí),需要保證Class-Path的依賴(lài)jar在目錄中保持平級(jí)。
根據(jù)目錄設(shè)置classpath
這里需要用到屬性classpathPrefix,配置如下:
<configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> </archive> </configuration>
Manifest生成結(jié)果如下:
Class-Path: lib/commons-io-2.11.0.jar lib/commons-lang-2.1.jar
注意這樣運(yùn)行這個(gè)jar文件時(shí),需要保證lib目錄和執(zhí)行jar保持平級(jí)。
配置classpath的加載樣式
加載樣式意思是可以通過(guò)特定的配置來(lái)配置classpath的路徑,配置屬性是:classpathLayoutType
自定義加載樣式classpathLayoutType=custom
配置如下:
<configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathLayoutType>custom</classpathLayoutType> <customClasspathLayout>lib/$${artifact.groupIdPath}/$${artifact.artifactId}-$${artifact.version}$${dashClassifier?}.$${artifact.extension}</customClasspathLayout> </manifest> </archive> </configuration>
接入如下:
Class-Path: lib/commons-io/commons-io-2.11.0.jar lib/commons-lang/commons-lang-2.1.jar
maven風(fēng)格加載樣式classpathLayoutType=repository
我們也可以設(shè)置maven風(fēng)格的加載樣式,如果目標(biāo)機(jī)器上有maven庫(kù),我們可以這樣設(shè)置:
<configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>${user.home}/.m2/repository</classpathPrefix> <classpathLayoutType>repository</classpathLayoutType> </manifest> </archive> </configuration>
結(jié)果如下:
Class-Path: ${user.home}/.m2/repository/commons-io/commons-io-2.11.0.jar ${user.home}/.m2/repository/commons-lang/commons-lang/2.1/commons-lang-2.1.jar
這里的${user.home}會(huì)替換成你電腦上的絕對(duì)路徑
強(qiáng)制使用SNAPSHOT版本的依賴(lài)
有時(shí)我們依賴(lài)的jar包可能是SNAPSHOT版本的,默認(rèn)情況SNAPSHOT版本的庫(kù)文件是不會(huì)被加載的,這里可以使用useUniqueVersions來(lái)啟用,配置如下:
<configuration> <archive> <manifest> <useUniqueVersions>false</useUniqueVersions> </manifest> </archive> </configuration>
這樣SNAPSHOT版本的jar依賴(lài)也會(huì)被加載。
加載外部的manifest文件
我們也可以將manifest編寫(xiě)好,然后直接使用我們自己編寫(xiě)的文件,配置如下:
<configuration> <archive> <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile> </archive> </configuration>
這里就直接加載我們自己編寫(xiě)的MANIFEST文件。
總結(jié)
與maven-jar-plugin相同的還有一個(gè)maven-war-plugin插件,用于將我們的程序打包成war格式的執(zhí)行包,也是maven默認(rèn)的打包工具。這個(gè)主要用于web項(xiàng)目。它的用法和maven-jar-plugin完全一樣,大家可以參照上面的使用。
到此這篇關(guān)于maven插件maven-jar-plugin構(gòu)建jar文件的詳細(xì)使用的文章就介紹到這了,更多相關(guān)maven-jar-plugin構(gòu)建jar文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- idea中maven使用tomcat7插件運(yùn)行run報(bào)錯(cuò)Could not start Tomcat問(wèn)題
- 如何使用maven-helper插件解決jar包沖突問(wèn)題
- SpringBoot Maven打包插件spring-boot-maven-plugin無(wú)法解析原因
- SpringBoot使用classfinal-maven-plugin插件加密Jar包的示例代碼
- maven插件maven-assembly-plugin打包歸納文件zip/tar使用
- Spring Boot的Maven插件Spring Boot Maven plugin詳解
- Maven插件之Dependency:analyze的使用
相關(guān)文章
java對(duì)接支付寶支付項(xiàng)目的實(shí)戰(zhàn)記錄
最近公司有一個(gè)需求是接入第三方支付(微信&支付寶),我接到了支付寶支付,所以下面這篇文章主要給大家介紹了關(guān)于java對(duì)接支付寶支付項(xiàng)目的相關(guān)資料,需要的朋友可以參考下2022-06-06使用spring的websocket創(chuàng)建通信服務(wù)的示例代碼
這篇文章主要介紹了使用spring的websocket創(chuàng)建通信服務(wù)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11MyBatis中的@SelectProvider注解源碼分析
這篇文章主要介紹了MyBatis中的@SelectProvider注解源碼分析,@SelectProvider功能就是用來(lái)單獨(dú)寫(xiě)一個(gè)class類(lèi)與方法,用來(lái)提供一些xml或者注解中不好寫(xiě)的sql,今天就來(lái)說(shuō)下這個(gè)注解的具體用法與源碼,需要的朋友可以參考下2024-01-01java實(shí)現(xiàn)周期性執(zhí)行(定時(shí)任務(wù))
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)周期性執(zhí)行定時(shí)任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09Spring中配置和讀取多個(gè)Properties文件的方式方法
本篇文章主要介紹了Spring中配置和讀取多個(gè)Properties文件的方式方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04Spring boot實(shí)現(xiàn)文件上傳實(shí)例(多文件上傳)
本篇文章主要介紹了Spring boot實(shí)現(xiàn)文件上傳實(shí)例(多文件上傳),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05解決MyBatis報(bào)錯(cuò):There is no getter for
這篇文章主要介紹了解決MyBatis報(bào)錯(cuò):There is no getter for property named'Xxx'in'class xxx.xxx.Xxx'問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08SpringBoot+Querydsl?框架實(shí)現(xiàn)復(fù)雜查詢解析
本篇主要將介紹的是利用spring query dsl框架實(shí)現(xiàn)的服務(wù)端查詢解析和實(shí)現(xiàn)介紹,對(duì)SpringBoot?Querydsl?查詢操作感興趣的朋友一起看看吧2022-05-05MyBatis SELECT基本查詢實(shí)現(xiàn)方法詳解
這篇文章主要介紹了MyBatis SELECT基本查詢實(shí)現(xiàn)方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08