解決maven打包時手動新增的依賴jar包打不進去的情況

戴瑞、發表於2020-12-22

這個問題忙了我一天多的時間,因為太棘手了, 所以記錄下來,防止忘記;

問題是這樣的,因為專案中用到了自定義的jar包,也就是遠端倉庫裡沒有的jar,所以想要引用就必須自己手動新增進去,在idea中執行是沒問題的,但是打包到測試環境後發現經常報錯

java.lang.NoClassDefFoundError   和  ClassNotFoundException 異常,經過一查詢才發現是因為打包的時候依賴jar包沒打進去;

一開始是在專案中匯入了本地的jar包。發現沒用

網上找到問題說是因為scope指定了system域是系統範圍使用的,在打包時不會將這個空間的包打進lib目錄下;

然後也在專案中手動新增了這個依賴jar包;發現還是不行

但是不管是mvn install 還是mvn package 打包後,在war包裡的 WEB-INF/lib 目錄下都沒看到這個jar包

根據這個問題,網上嘗試了很多方法都沒用,最後自己在一個網站上找到了方法
 

解決方案

1、在pom.xml檔案的 build 標籤下面加入以下程式碼即可


<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <webResources>
            <resource>
                <!-- 源jar包所在位置, ${project.basedir} 表示當前目錄的路徑 -->
                <directory>${project.basedir}/lib</directory>

                <!-- 打包後的目標資料夾  ,也就是你打包後的war包或者jar包的目錄  -->
                <targetPath>WEB-INF/lib</targetPath>
                <filtering>false</filtering>
                <includes>
                    <!-- 把所有的jar包都打進去 -->
                    <include>**/*.jar</include>
                </includes>
            </resource>
        </webResources>
    </configuration>

加好後的程式碼如下 

 

2、因為有了  <directory>${project.basedir}/lib</directory>  ,所以我們需要在當前專案下建立一個lib資料夾,然後把需要打包的jar放進去

 

3、新增這段程式碼後再執行mvn packge 或者mvn install。我們可以看到,jar包已經打進去了

相關文章