1. 程式人生 > >IDEA使用Maven專案不能加入本地Jar包的解決方法

IDEA使用Maven專案不能加入本地Jar包的解決方法

使用IDEA編輯Web專案已經逐漸超過了使用eclipse的人數,但是IDEA對於pom.xml的執行也就是Maven方式導包支援並不是很完善,簡單來說就是pom.xml上面記錄的依賴庫一般都能匯入,但是如果pom.xml上面的某個依賴庫失效,比如遠端伺服器關閉或者網路不通,或者是你想要加入本地硬碟上的某個jar包而不修改pom.xml的時候,IDEA的弊端就會顯現出來。主要表現就是無法獲得的依賴庫或者本地Jar包無法放到/WEB-INF/lib目錄下,導致Web專案部署時報錯。

給出的依賴庫網路路徑為

<!-- https://mvnrepository.com/artifact/com.github.noraui/ojdbc8 -->
<dependency>
    <groupId>com.github.noraui</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>12.2.0.1</version>
</dependency>

然而這個路徑在2015年還有效,在2018年已經連線不上了(目前唯一還有效的是ojdbc for java 1.4的版本,2015年,無法支援oracle 10g及以後的資料庫),如果你在maven裡這樣配置,那麼IDEA的models裡就會告訴你找不到該依賴庫,當然你的WEB-INF裡面也就不會有jdbc的jar包,你的應用當然就連線不了資料庫了

IDEA會貼心的在相關maven依賴庫下面加波浪線,並且把無法載入的資源用紅色表示。

如果此時我們手動向Libraries裡面加入本地的Jar包可不可以呢?

能加當然是能加進去,不過根據我多次的反覆實驗發現,你加入到Project Structure裡面的Models或者Libraries裡面之後,編寫程式碼的時候是可以找到依賴的,但是在打war包的時候還是不會把ojdbc加入進去的,所以還是沒能達到我們想要的效果。這主要是因為IDEA只會把pom.xml裡面記錄的jar包放入到WEB-INF,而不會理睬你其他方式加入的jar包。所以我們最後還得從maven入手。

此時我們就需要在上圖出現問題的地方找到標紅色的Classes下面的路徑,通過手動點選來修改成本地jar包的位置,並且應該變為綠色,如下

這樣IDEA就不會把這個maven源報錯了,同時pom.xml並沒有被修改,只是專案目錄下.idea目錄下的某個.iml被修改了,這個修改要好好保留,因為不知道什麼時候你一編譯就又會按照pom.xml再給你改回來。如果需要長期不讓它報錯,可以使用cmd命令把本地的jar包加入到本地maven庫中,命令如下:(把當前目錄下的ojdbc8.jar按照上面的pom.xml中的配置加入到本地maven源)

mvn install:install-file -Dfile=ojdbc8.jar -DgroupId=com.github.noraui -DartifactId=ojdbc8  -Dversion=12.2.0.1 -Dpackaging=jar

另外如果不把maven裡面自己設定的jar包輸出到web根目錄lib資料夾的話,那麼打出來的war包或者是放在tomcat裡跑還是會在啟動的時候報錯,如下就是使用了HttpClient也在maven里加入了HttpClient的依賴,但是啟動tomcat仍然報錯找不到類,此時你需要按照tomcat的一貫套路把相關jar包放到web根目錄的lib目錄下

此時還是進入Project Structure,在左側找到Artifacts,然後找到WEB-INF,新建一個lib目錄,然後點選加號把相關的庫引入

加完之後

只有這樣,打出來的war包的WEB根目錄下才會有lib資料夾和裡面的相關依賴jar包

如果你發現修改了這裡還沒有把自定義的jar包打包到WEB-INF下面(只是在程式碼窗口裡不報錯了),一個可能性是在編譯過程中剛剛的修改又被pom.xml給覆蓋了,另一個原因可能是你沒有把編譯結果輸出到待發布目錄,通過下面的方式可以修改。

後記:在沒有使用maven框架的時候,java檔案和包是可以直接放在src目錄下的,但是引入maven之後,IDEA會自動幫你吧原來src下的包遷移到src/main/java下面,同時建立src/main/resources目錄,這裡面一般放我們的log4j配置檔案log4j.properties。

在沒有maven框架的時候,log4j.propertise應該放在src下面才能被自動識別,而加入maven框架之後應該放在src/main/resources下,否則log4j找不到預設配置檔案

如下:在不使用maven框架時的目錄結構,所有jar包都是放在專案根目錄下

使用maven後的目錄結構,沒有jar包了,以pom.xml進行引入

另外還需要注意的一點就是,對於pom.xml裡面和idea裡面均有多出設定JDK版本的地方,最好統一,否則無法build成功,首先是pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <groupId>groupId</groupId>
    <artifactId>XDphone</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.51</version>
        </dependency>
       ......

    </dependencies>
</project>

然後是專案程式碼風格

然後是編譯器版本在File-Settings裡面

這樣就能避免internal compiler error了