maven+maven添加本地lib

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

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

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

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

一般配置的镜像为:

<mirror>

<id>aliyunmaven</id>

<mirrorOf>*</mirrorOf>

<name>阿里云公共仓库</name>

<url>https://maven.aliyun.com/repository/public</url>

</mirror>

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

内容如下:

<mirror>
    <id>huaweicloud</id>
    <mirrorOf>*</mirrorOf>
    <url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>

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

如何生成证书呢?往下看

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

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

下载证书

 文件已经生成

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

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

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

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

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

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

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

 

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

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

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

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

 

 亦或者由于年代久远,有一些坐标已经没有办法拉取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已经有这样的插件,帮你做这个事情。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
        <configuration>
            <target>1.8</target>
            <source>1.8</source>
            <compilerArguments>
                <extdirs>./lib</extdirs>
            </compilerArguments>
        </configuration>
        </plugin>
    </plugins>
</build>

 

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

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

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

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

如果是多模块项目呢?

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

<compilerArguments>

          <extdirs>./lib</extdirs>    <!--这里的  ./   就代表了项目根路径,只要往下写到自己指定的路径即可-->

</compilerArguments>

 

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值