maven 打包時包含本地 jar

在項目中需要使用maven的打包工具,生成zip壓縮包,使用的插件是assembly-plugin;使用mavne的package命令直接生成war包。因爲一些特殊的原因,需要使用一些本地的jar進行依賴,加載外部jar後編碼過程中沒有任何問題,但是打包時一直報“程序包不存在”。

思考一下:Maven本質上是一個插件框架,它的核心並不執行任何具體的構建任務,所以雖然在開發過程中項目正常依賴沒有任何問題,但是打包的時候肯定就找不到本地的jar了。

這種問題有很多解決方案,比如加入本地倉庫、搭建maven私服等,如需這些解決方案自行谷歌百度,資料很多。

因爲maven編譯使用的插件是maven-compiler-plugin,所以只能在maven-compiler-plugin上找問題了,正常情況下的maven-compiler-plugin簡單配置如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

如果需要在打包的時候依賴本地 jar,需要修改增加如下配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>UTF-8</encoding>
        
        <!-- 添加引入本地jar組件  此方法適用於低於 maven 的3.1版本之前-->
        <compilerArguments>
            <extdirs>${project.basedir}/src/lib</extdirs>
        </compilerArguments>

    </configuration>
</plugin>

如果使用的maven版本高於3.1,上述配置已被廢棄,需要做如下修改:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>UTF-8</encoding>
        
        <!-- 添加引入本地jar組件 -->
        <compilerArgs> 
            <arg>-extdirs</arg> 
            <arg>${project.basedir}/src/lib</arg>
        </compilerArgs>
 
    </configuration>
</plugin>

需要注意的是最好添加${project.basedir}以便有更好的兼容性。

修改上述編譯插件後,打包正常,不再報錯,但是有一個新的問題產生。生成的zip包並不包含依賴的本地jar。

修改maven-assembly-plugin插件的配置文件,增加如下配置:

<fileSet>      
    <directory>src\lib</directory>
    <outputDirectory>lib</outputDirectory>
</fileSet>

意思是把src\lib下的jar輸出到target根目錄lib下。

至此,使用maven的package命令,已能正常運行,併成功把本地jar包打入zip壓縮包的lib目錄下。

 

想要了解更多內容,請關注我的個人微信公衆號【程序員Style】,獲取更多精彩內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章