源碼和依賴分離
博主在接觸一個(gè)新項(xiàng)目的時(shí)候,發(fā)現(xiàn)這個(gè)項(xiàng)目打包出來的jar包非常的小,這樣在替換測試環(huán)境的jar包時(shí)就會(huì)顯得十分有優(yōu)勢。通過查看pom文件得知,原來這個(gè)項(xiàng)目用到了maven-dependency-plugin和maven-jar-plugin倆個(gè)maven插件。
實(shí)現(xiàn)邏輯
我們的目的是實(shí)現(xiàn)源碼和依賴分離,也就是在打包的時(shí)候需要將源碼和依賴分開,這時(shí)候我們需要先借助maven-dependency-plugin插件在打包前將依賴復(fù)制到一個(gè)路徑a,然后打包的時(shí)候指定classpath就是我們之前復(fù)制的路徑a。
maven-dependency-plugin
maven-dependency-plugin插件跟我們項(xiàng)目中的依賴有關(guān),我們可以通過這個(gè)插件來分析依賴關(guān)系,拷貝依賴關(guān)系,解壓依賴文件。
詳細(xì)配置
phase是maven生命周期中的某個(gè)時(shí)機(jī),這里是prepare-package,也就是準(zhǔn)備打包的時(shí)候。goal就是插件的目標(biāo),也就是我們希望插件來幫我們完成什么事情。maven-dependency-plugin的goal非常多,博主這里使用的是copy-dependencies,插件的詳細(xì)配置如下所示:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<!---時(shí)機(jī)為準(zhǔn)備打包->
<phase>prepare-package</phase>
<goals>
<!---目標(biāo)根據(jù)pom文件來拷貝依賴文件->
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!--輸出路徑-->
<outputDirectory>${project.build.directory}/bin/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<!--新文件才會(huì)覆蓋-->
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
maven-jar-plugin
maven-jar-plugins是打用來打jar包的插件,我們可以設(shè)定 META-INF/MAINFEST .MF文件的參數(shù),比如mainClass主類的位置,是否添加classpath路徑,classpath路徑的前綴等屬性。
詳細(xì)配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!--添加外部jar包到classpath-->
<addClasspath>true</addClasspath>
<!--classpath路徑前綴-->
<classpathPrefix>lib/</classpathPrefix>
<!--主類的全類名-->
<mainClass>com.Application</mainClass>
</manifest>
</archive>
<!--jar包輸出路徑為項(xiàng)目構(gòu)建路徑target下的bin目錄-->
<outputDirectory>
${project.build.directory}/bin
</outputDirectory>
</configuration>
</plugin>
查看實(shí)際效果
從下圖可以知道,我們的依賴跟源碼已經(jīng)成功分離開來。

<span id="wechatGzh">博主微信公眾號(hào)</span>
<img src="https://gitee.com/chenhaogit/blogimages/raw/master/xsj/wzgzh-8cm.jpg" style="float:right"/>