maven+maven添加本地lib

不知道大家发现了没有,自从2020年开始,maven仓库的拉取有位困难?

明明配置了阿里的镜像,或者华为的镜像,仍然无法拉取下来jar包,那么这一篇文章,开始慢慢分析者其中的坑。

首先,http协议改成了https协议,导致必须配置证书,我们以大家最优先选择的阿里镜像和华为镜像作为说明

阿里镜像及配置说明: https://help.aliyun.com/document_detail/102512.html?spm=a2c40.aliyun_maven_repo.0.0.36183054I5uPtH

一般配置的镜像为:

aliyunmaven

*

阿里云公共仓库

https://maven.aliyun.com/repository/public

华为镜像及配置说明:https://mirrors.huaweicloud.com/(这里需要点开maven)

maven+maven添加本地lib_第1张图片

内容如下:


    huaweicloud
    *
    https://mirrors.huaweicloud.com/repository/maven/

这里发现,只要是仓库地址,都是https,那么,我们就需要添加证书到我们的本地

如何生成证书呢?往下看

以华为maven镜像为例,进行演示

maven+maven添加本地lib_第2张图片

获取maven的镜像地址,访问它:https://mirrors.huaweicloud.com/repository/maven/

maven+maven添加本地lib_第3张图片

下载证书

maven+maven添加本地lib_第4张图片

maven+maven添加本地lib_第5张图片

maven+maven添加本地lib_第6张图片

maven+maven添加本地lib_第7张图片

maven+maven添加本地lib_第8张图片

maven+maven添加本地lib_第9张图片

maven+maven添加本地lib_第10张图片

maven+maven添加本地lib_第11张图片

maven+maven添加本地lib_第12张图片

maven+maven添加本地lib_第13张图片  文件已经生成

接下来,把上面那步的(abc.cer)这个证书导入java中的cacerts证书库

使用命令:keytool -import -alias cacerts(证书名自定义) -keystore cacerts(证书存放位置) -file d:\mvn.cer(上一步保存的证书文件的位置)

keytool工具是JDK自带的工具(我使用的是JDK8,不知道JDK11带不带了)

导入的时候,需要先输入这个工具的密码(也可能是仓库密码,首次的话,需要自己设置)

问,是否信任此证书,需要输入“是”

maven+maven添加本地lib_第14张图片

我们可以使用此命令查看是否已经导入:keytool -list -keystore cacerts(这里的名字和上面自定义的一致)

此时就可以使用maven的阿里源或者华为源了。

 

那么现在开始解决第二个问题,为什么配置了阿里源或者华为源,仍然无法拉取jar,此处,以oracle的driver为例:

我们在maven仓库中找到了oracle的jar包

maven+maven添加本地lib_第15张图片

此时,引入这个坐标,你说能起作用嘛?显然不能!这还是一个比较浅的坑。

不知道大家有没有见过这个坐标

 
  

 亦或者由于年代久远,有一些坐标已经没有办法拉取jar包了

 

这时候又该怎么办呢?

有两种办法,第一种,将jar导入maven仓库,使用此命令

mvn install:install-file -Dfile=jar包的位置(参数一) -DgroupId=groupId(参数二) -DartifactId=artifactId(参数三) -Dversion=version(参数四) -Dpackaging=jar

例如:

mvn install:install-file -DgroupId=ojdbc -DartifactId=ojdbc6 -Dversion=11.2.0.4 -Dpackaging=jar -Dfile=ojdbc6.jar

需要注意以下几点:

注意"-"不能缺少 install后面的"-"是没有空格的

注意"-Dfile"中jar包的路径和jar包的名字.

注意看cmd命令提示,查看本地repository中是否成功的复制了jar包

 

当然,这个办法,有时候基本失败居多,也有说法,是说新建一个pom文件,然后通过pom导入到maven仓库,反正也是可行性不高,你想,年代久远了,或者jar是某厂商自己的,maven仓库不可能有这个jar包了,导入失败是必然的吧(也可能有大神有什么神操作,我就不好意思说了)

 

那么,最后一招!!

既然maven拉不下来,怎么办??

还记得当年最开始,没有maven的时候是怎么做的嘛?

将jar添加到类路径中!

那么我们为什么不可以让maven和类路径共存呢?

恭喜你,maven已经有这样的插件,帮你做这个事情。


    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.1
        
            1.8
            1.8
            
                ./lib
            
        
        
    

 

我们使用maven的compile插件,将项目路径下的lib路径添加到maven的编译路径中,当我们使用mvn package时,maven就会将这个路径下的jar包一块儿打进来。

有人说,如果我不这么做呢?

那么你会发现,你的代码实际上是引用了你lib下的jar的方法的,但是maven找不到这个jar,如图

maven+maven添加本地lib_第16张图片

到这里,基本上就可以保证,你的maven可以拉下来的jar,和自己放入类路径的jar都被打包进去。

如果是多模块项目呢?

怎么找到自定义的类路径下的所有jar呢?

          ./lib   

 

至此,maven的坑基本结束了,所以说,maven也不是十全十美的。只有知道它的不足,才能更加客观的运用它。

你可能感兴趣的:(maven+maven添加本地lib)