maven實(shí)戰(zhàn)-源碼和依賴分離

源碼和依賴分離

博主在接觸一個(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)成功分離開來。

實(shí)際效果

<span id="wechatGzh">博主微信公眾號(hào)</span>

<img src="https://gitee.com/chenhaogit/blogimages/raw/master/xsj/wzgzh-8cm.jpg" style="float:right"/>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容