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

Maven导入jar包问题解决

  • 1、问题来源
  • 2、问题场景和解决方案
    • 2.1、groupId,artifactId和version依赖有问题
    • 2.2、Maven版本问题
    • 2.3、maven仓库设置问题
    • 2.4、lastUpdated问题
      • 2.4.1、脚本删除lastUpdated
      • 2.4.2、everything删除lastUpdated
  • 3、终极解决方案 : pom system 依赖
  • 4、补充说明(私有jar 无pom依赖情况)

1、问题来源

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

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

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

2、问题场景和解决方案

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

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

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

举个栗子:

<dependency>
	<groupId>org.apache.poigroupId>
	<artifactId>poiartifactId>
	<version>3.14version>
dependency>

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

Maven导入jar包失败问题,lastUpdated问题解决_第1张图片
这个有就可以确认依赖的groupId,artifactId和version是没有问题的。

2.2、Maven版本问题

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

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

具体Maven下载地址:https://maven.apache.org/download.cgi

2.3、maven仓库设置问题

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

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

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

<localRepository>D:\mvnrepositorieslocalRepository>
<servers>
    <server>
        <id>releasesid>
        <username>adminusername>
        <password>adminpassword>
    server>
    <server>
        <id>snapshotsid>
        <username>adminusername>
        <password>adminpassword>
    server>
servers>
<mirrors>
    <mirror>
        <id>nexusid>
        <url>http://xx.xx.xx.xx:xx/url>
        <mirrorOf>centralmirrorOf>
    mirror>
    <mirror>
        <id>alimavenid>
        <name>aliyun mavenname>
        <url>http://maven.aliyun.com/nexus/content/groups/public/url>
        <mirrorOf>centralmirrorOf>
    mirror>
mirrors>
  • 中存放的是maven仓库地址。
  • 存放的是访问nexus的账号密码。
  • 是依赖包本地存放的地址,最好不要放在c盘。

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

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

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

2.4、lastUpdated问题

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

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

例如fastJson , D:\mvnrepositories + com + alibaba + fastjson + version
Maven导入jar包失败问题,lastUpdated问题解决_第2张图片
拉取失败的情况:
Maven导入jar包失败问题,lastUpdated问题解决_第3张图片

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

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

2.4.1、脚本删除lastUpdated

bat脚本删除:

set REPOSITORY_PATH=D:\mvnrepositories
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
    del /s /q %%i
)
rem 搜索完毕
pause

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

脚本来自 https://blog.csdn.net/qq_36095679/article/details/97271879,具体细节可以访问查看。

2.4.2、everything删除lastUpdated

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

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

Maven导入jar包失败问题,lastUpdated问题解决_第4张图片
ctrl + A 权限,右键直接删除即可。

删除完成之后再次maven reimport。

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

Maven导入jar包失败问题,lastUpdated问题解决_第5张图片

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

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

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

Maven导入jar包失败问题,lastUpdated问题解决_第6张图片

  1. 修改pom文件

新增 scope 为 system

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

Maven导入jar包失败问题,lastUpdated问题解决_第7张图片

修改示例:

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

点击 File 选择 Project Structure 修改项目设置:
选择 + ==> Java 找到 项目下jar包,之后添加即可。
增加的时候,可以选择source或者classes,好像两种都可以,这个不太确定。
Maven导入jar包失败问题,lastUpdated问题解决_第8张图片
4. pom文件插件打包配置

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

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

5、补充(20230316)
假如我们有存在第三方包放在commons公共依赖组件中,隔了一层上面的打包方式就会失效,这里SpringBoot 配置可以增加配置:

     <plugin>
          <groupId>org.springframework.bootgroupId>
          <artifactId>spring-boot-maven-pluginartifactId>
          <configuration>
              <includeSystemScope>trueincludeSystemScope>
          configuration>
      plugin>

includeSystemScope 见名知意就是把system scope依赖内容打进来。

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

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

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

扩展

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

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

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

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

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

你可能感兴趣的:(Java,基础,开发工具,maven,idea,java,jar)