Maven导入jar包失败问题,lastUpdated问题解决

https://blog.csdn.net/weixin_42798851/article/details/118678116?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1.pc_relevant_antiscanv2&spm=1001.2101.3001.4242.2&utm_relevant_index=4

Maven导入jar包问题解决

1、问题来源

从git或者svn上拉取了项目,然后as a meven project 后发现文件中有红色无法导入的问题,是不是这种现象经常遇到。

嗯,没有错,这个可能是同事提交的时候没有测试,提交了错误的依赖,也可能是你因为网络原因确实没有拉下来。

在这里总结下可能遇到的几种情况。

2、问题场景和解决方案

2.1、groupId,artifactId和version依赖有问题

可能是依赖包确实有问题。例如多添加了一个字母,版本错误等等。可以使用maven仓库验证下。

验证地址:https://mvnrepository.com/

举个栗子:

<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>3.14</version>
</dependency>
12345

打开连接地址,输入poi查询,可以对查询到的结果点击查看。

在这里插入图片描述 这个有就可以确认依赖的groupId,artifactId和version是没有问题的。

2.2、Maven版本问题

因为大家使用的Maven版本不同,IDEA对Maven支持的也不同,我这里使用的2018.3版本就无法支持最新的Maven版本。

可以根据IDEA下载的时候支持的那个版本,之后的版本可能是无法支持的。

具体Maven下载地址:Maven – Download Apache Maven

2.3、maven仓库设置问题

我们在开发的时候经常会使用内部封装的一些包,例如一些通用的工具包,假如我们使用了公用的Maven仓库无法拉取到这些包。

一般我们配置开发环境的时候会配置公司的私有库,我们可以打开下载解压的maven配置文件:

maven是免安装的,解压配置即可: 我放在D:/soft下,打开setting文件修改,例如:

<localRepository>D:\mvnrepositories</localRepository>
<servers>
    <server>
        <id>releases</id>
        <username>admin</username>
        <password>admin</password>
    </server>
    <server>
        <id>snapshots</id>
        <username>admin</username>
        <password>admin</password>
    </server>
</servers>
<mirrors>
    <mirror>
        <id>nexus</id>
        <url>http://xx.xx.xx.xx:xx/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>
1234567891011121314151617181920212223242526
  • <mirrors></mirrors> 中存放的是maven仓库地址。

  • <servers></servers> 存放的是访问nexus的账号密码。

  • <localRepository></localRepository> 是依赖包本地存放的地址,最好不要放在c盘。

注意: 要把公司的私有库放阿里云上面。

假如刚才公司不知道公司私有库,就去找同事问下。

对于 <mirrors></mirrors> 中的私有库,可以使用前面的http://IP:Port直接浏览器访问,输入<servers></servers> 中的账号密码登录即可。 假如可以访问成功,就证明maven依赖库本地是可以访问公司私有库,也就是网络没啥问题。

2.4、lastUpdated问题

当我们拉取jar包失败的时候,本地库就会生成lastUpdated 文件。 拉取成功的使用可以在本地仓库中查看到jar包。

查看的路径和groupId,artifactId和version有关。通常是 setting 文件中的地址 加上 groupId,artifactId 和 version。

例如fastJson , D:\mvnrepositories + com + alibaba + fastjson + version 在这里插入图片描述 拉取失败的情况: 在这里插入图片描述

删除lastUpdated 可以挨个查找,假如多个依赖有问题的话,查找删除太麻烦。

也可以全部依赖库删除再重新拉取,但是多次拉取耗费时间过长。

2.4.1、脚本删除lastUpdated

bat脚本删除:

 
@echo off
rem create by NettQun
  
rem 这里写你的仓库路径
set REPOSITORY_PATH=D:\Java\maven-repository\maven-aliyun\repository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
    echo %%i
    del /s /q "%%i"
)
rem 搜索完毕
pause

新建txt文件,ctrl + v 放入脚本,修改扩展名为 .bat。 其中 REPOSITORY_PATH 后的地址是 setting 文件 <localRepository></localRepository> 中的地址。

脚本来自 maven导入依赖失败问题——最系统、最彻底的解决方案_方才兄的博客-CSDN博客_maven依赖导入失败,具体细节可以访问查看。

2.4.2、everything删除lastUpdated

推荐软件everything, 下载地址 https://www.voidtools.com/zh-cn/

安装后可以对lastUpdated 检索,比windows自带检索速度快。

在这里插入图片描述 ctrl + A 权限,右键直接删除即可。

删除完成之后再次maven reimport。

使用 IDEA 推荐插件 maven helper 对maven的操作比较友好。 点击项目右键执行:

在这里插入图片描述

3、终极解决方案 : pom system 依赖

假如以上的方案都不行怎么办。我们还有终极解决方案 : pom system 依赖。 也是依赖第三方的jar包的方案解决方案:

  1. 项目根目录下创建 lib 放入需要依赖的jar

在这里插入图片描述

  1. 修改pom文件

新增 scope 为 system

scope 的依赖传递规则为,其中 system 与 provider 一致 在编译和测试时有效:

在这里插入图片描述

修改示例:

<dependency>
    <groupId>com.xx.xx</groupId>
    <artifactId>xx-xx</artifactId>
    <version>15.8.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/xx.jar</systemPath>
</dependency>
1234567
  1. 把lib 中的jar放入项目依赖libraries

点击 File 选择 Project Structure 修改项目设置: 选择 + ==> Java 找到 项目下jar包,之后添加即可。 增加的时候,可以选择source或者classes,好像两种都可以,这个不太确定。 在这里插入图片描述 \4. pom文件插件打包配置

以上1-3就可以解决本地无法运行的问题,但是还是无法打包,这个时候就需要在pom文件 builder中配置。

<resources>
    <resource>
        <directory>${project.basedir}/lib</directory>
        <targetPath>/BOOT-INF/lib/</targetPath>
        <includes>
            <include>**/*.jar</include>
        </includes>
    </resource>
</resources>
123456789

4、补充说明(私有jar 无pom依赖情况)

关于lastUpdated 问题,也就是无法从私服拉取jar包,可能由于网络原因下载失败,按照原来的访问删除重新拉取即可。

特别注意

也存在一种情况,私服的jar包本身就没有pom文件,所以怎么拉取都会失败!!!!!!

也就导致pom文件依赖再拉取都会不成功!

xxxx-15.8.0.jar
xxxx-15.8.0.jar.lastUpdated
xxxx-15.8.0.jar.sha1
xxxx-15.8.0.pom.lastUpdated
1234

这种情况可以通过 pom system 依赖 进行配置。 在配置 systemPath 时候从项目根路径出发,IDEA 开发会提示路径。 使用 maven 进行打包的时候注意 使用上述 build 进行配置。

<resources>
    <resource>
        <directory>${project.basedir}/lib</directory>
        <targetPath>/BOOT-INF/lib/</targetPath>
        <includes>
            <include>**/*.jar</include>
        </includes>
    </resource>
</resources>
123456789

扩展

${project.basedir} 代表项目的路径,以上配置也就是把lib下所有jar 放到 /BOOT-INF/lib 下。

也可以尝试放到resources下,示例:

${project.basedir}/lib 替换为 ${project.basedir}/src/main/resources/lib
1

打包之后,所有使用到jar包可以传递。

如何判断是否没有pom文件,具体可以解压查看jar包的情况。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值