Mavn 項目 引入第三方jar包 致使ClassNotFoundException

案例 

我有一個Maven構建的項目,項目模塊之間有依賴關係,我須要用到一個本地的jar包,而該jar包不能經過配置pom.xml文件從遠程倉庫自動下載,因而我直接導入該jar包到其中一個項目,不經過pom.xml進行管理,致使其餘依賴該模塊的模塊不能引用該jar,出現ClassNotFoundExceptionweb

在該項目中,模塊之間存在以下依賴:maven

該項目須要引入fastdfs_client_v1.20.jar 這個包,來實現對fastDfs分佈式文件系統進行操做,service、controller都涉及到該操做的使用 ,因此如今但願把對FastDfs的操做工具類放在common這個模塊,來進行共享,可是如今common這個模塊直接把fastdfs_client_v1.20.jar經過 lib導入的話,由於這種作法並非經過Maven進行構建,因此service 和web模塊都無法對common模塊涉及FastDfs的操做類進行繼承,也就是說就算把工具類放在common模塊,service和web模塊都沒法訪問到該工具類,沒法導入相應的包,運行整個WEB項目的時候,上傳文件到FastDfs系統,就會出現ClassNotFoundException,除非service 和 web 模塊都能繼承 common模塊下的fastdfs_client_v1.20.jar這個jar包分佈式

 

  解決方案

 

1.找到該包的具體位置工具

2.打開CMD ,進入該第三方jar包的目錄spa

3.運行一下命令,對該jar包進行手動構建3d

mvn install:install-file -Dfile=D:\Users\10856214\workspace-template\fastDfs\lib\fastdfs_client_v1.20.jar -DgroupId=fastdfs_client -DartifactId=fastdfs_client -Dversion=1.20 -Dpackaging=jar -DgeneratePom=true

4.查看本地倉庫,看該jar包是否已經添加到本地倉庫文件夾code

5.把該jar包交給maven管理,添加到pom.xml中xml

<dependency>  
       <groupId>fastdfs_client</groupId>  
       <artifactId>fastdfs_client</artifactId>  
       <version>1.20</version>  
</dependency>

 


6.從新Maven install common模塊,看service 和web模塊是否已經正常導入common模塊的工具類blog

 

第二種方式(有時候可能不行)繼承

在maven項目中,對於那些在maven倉庫中不存在的第三方jar,依賴解決一般有以下解決方法:

方法1:直接將jar包拷貝到項目指定目錄下,而後在pom文件中指定依賴類型爲system,如:

<dependencies>
    <dependency>
        <groupId>xxx</groupId>
        <artifactId>xxx</artifactId>
        <version>6.0</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/libs/xxx-1.0.jar</systemPath>
    </dependency>
</dependencies>

請注意:scope爲system的依賴,在打包時不會自動打包到最終jar包中的,必須在resources節點中明確指定須要一塊兒package的資源:

<resources>
    <resource>
        <targetPath>lib/</targetPath>
        <directory>lib/</directory>
        <includes>
            <include>**/my-jar.jar</include>
        </includes>
    </resource>
</resources>

這個方法在解決單個項目依賴是能夠的。

可是,若是項目中存在多個模塊,且在多個模塊中都須要依賴指定的第三方jar包,那在不一樣的模塊中都進行這樣的配置有失穩當,jar包要來回拷貝屢次。

相關文章
相關標籤/搜索