Maven項(xiàng)目打Jar包并添加依賴步驟詳解
之前介紹了使用spring-boot-maven-plugin插件打jar包,會(huì)把所有的依賴文件都導(dǎo)入,然后變成了一個(gè)可執(zhí)行的jar包。這樣的不好的地方就是,我實(shí)際上并不需要把依賴的jar包也打入到生成的jar包里面去,僅僅需要把當(dāng)前項(xiàng)目的代碼打包。生成的jar包只要能引用到它所依賴的jar包,并且可以執(zhí)行就好了。
那么一般情況下,打包時(shí)如何添加依賴呢?
使用maven-dependency-plugin插件
子項(xiàng)目中的pom.xml文件中,添加以下maven-dependency-plugin依賴,這個(gè)maven-dependency-plugin依賴的作用就是自動(dòng)拷貝jar包到target目錄
這是我的Maven子項(xiàng)目打包,指定了將它的依賴的父項(xiàng)目中的jar包拷貝到target下的lib目錄
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- ${project.build.directory}為Maven內(nèi)置變量,缺省為target -->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>true</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
關(guān)于maven-dependency-plugin:用得最多的幾個(gè)操作:copy, copy-dependencies和它們對(duì)應(yīng)的unpack, unpack-dependencies
描述:copy 和 unpack操作是由要拷某個(gè)包,這個(gè)包需要具體指定要拷哪個(gè)包,與當(dāng)前工程的依賴沒有關(guān)系。這兩者區(qū)別-是否解壓
copy-dependencies和unpack-dependencies,但是它是用來拷當(dāng)前工程的依賴包的。這兩者區(qū)別-是否解壓
copy操作可以用來將某個(gè)(些)maven artifact(s)拷貝到某個(gè)目錄下。添加phase和goal如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
然后就是配置,copy可以的配置的項(xiàng)比較多,詳細(xì)的請(qǐng)參考:copy配置。下面是一些常用項(xiàng)說明:
● artifactItems: 指定要拷貝的jar包
● prependGroupId: 用來指示拷出來的library名字需要不需要加上groupId,默認(rèn)是不加
● outputDirectory: 用來指定拷出后Libraries的存放地
這里除了artifactItems沒有默認(rèn)值,需要指定外,所有其他的選項(xiàng)都可以被忽略:
<configuration>
<artifactItems>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</artifactItem>
</artifactItems>
</configuration>
以上配置會(huì)將junit包拷到target/dependency目錄下,文件名為:junit-4.11.jar。
unpack和copy類似,只不過它會(huì)把拷來的包解開。junit拷完以后,放到lib和lib2下的不再是Jar包,還是Jar包里的內(nèi)容。
copy-dependencies 和 unpack-dependencies
上面介紹的copy 和 unpack操作是由要拷某個(gè)包,這個(gè)包需要具體指定要拷哪個(gè)包,與當(dāng)前工程的依賴沒有關(guān)系。copy-dependencies和它有點(diǎn)類似,但是它是用來拷當(dāng)前工程的依賴包的,典型的,例如我們有一個(gè)web應(yīng)用,當(dāng)打成war包的時(shí)候,它所有的依賴也需要被打到應(yīng)用中。
copy-dependencies的參數(shù)有很多,詳細(xì)的可以參考:copy-dependencies Doc,但是幾乎所有都有默認(rèn)值。所以一個(gè)最簡(jiǎn)單的定義如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
這里沒有指定任何配置,所有的參數(shù)都用默認(rèn)值,則當(dāng)前工程的所有依賴(直接、間接的)都會(huì)被拷到target/dependency目錄下。
也可以使用outputDirectory指定存放在。另外,以下幾個(gè)參數(shù)可以控制哪些依賴將被拷出(或排除):
- excludeArtifactIds
- excludeClassifiers
- excludeGroupIds
- excludeScope
- excludeTransitive
- excludeTypes
- includeArtifactIds
- includeClassifiers
- includeGroupIds
- includeScope
- includeTypes
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
如何使用Code128字體將文本轉(zhuǎn)換為code128條形碼
這篇文章主要介紹了如何使用Code128字體將文本轉(zhuǎn)換為code128條形碼 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
javaWEB實(shí)現(xiàn)相冊(cè)管理的簡(jiǎn)單功能
這篇文章主要介紹了javaWEB實(shí)現(xiàn)相冊(cè)管理的簡(jiǎn)單功能,包括圖片的上傳、統(tǒng)一瀏覽、單個(gè)下載、單個(gè)刪除,還有一個(gè)功能只能刪除自己上傳的文件,感興趣的小伙伴們可以參考一下2015-11-11
maven如何在tomcat8中實(shí)現(xiàn)自動(dòng)部署
本篇文章主要介紹了maven如何在tomcat8中實(shí)現(xiàn)自動(dòng)部署,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10
淺談@Aspect@Order各個(gè)通知的執(zhí)行順序
這篇文章主要介紹了@Aspect@Order各個(gè)通知的執(zhí)行順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
基于ReentrantLock的實(shí)現(xiàn)原理講解
這篇文章主要介紹了ReentrantLock的實(shí)現(xiàn)原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之哈希表
這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之哈希表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01
Springboot整合ActiveMQ實(shí)現(xiàn)消息隊(duì)列的過程淺析
昨天仔細(xì)研究了activeMQ消息隊(duì)列,也遇到了些坑,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合ActiveMQ的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02

