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包要来回拷贝屡次。

相关文章
相关标签/搜索