问题解决:尝试解决maven依赖找不到的n种姿势

 

问题场景

公司的原仓库出了问题,需要更换新的仓库。故给了一个新的仓库地址。但是奇葩的是,更换之后,就出问题了。比如原本有A-0.0.1-SNAPSHOT.jar,在私服上面也有这个版本的jar包,但是就是没办法找到,一直提示该jar的该版本找不到。

问题环境

软件 版本
maven 3.2.3
IntelliJ IDEA 2019.1

问题原因

接下来就是探索发现之旅了。

  1. 因为是更新了setting文件,所以怀疑是没有选对文件。在 ideasetting上面搜索maven,查看相关的选项,看到是选对了settings.xml。这个尝试失败;
  2. 因为是使用idea,所以怀疑是不是工具没有更新依赖,于是我将整个项目的 maven依赖重新导入,即reimport。很遗憾,没有解决问题;
    问题解决:尝试解决maven依赖找不到的n种姿势
  3. 因为之前有遇到一个奇葩的问题,怎么reimport都失败,而使用ideamaven插件的compile命令,反而触发了依赖下载。所以,我点击了compile,很遗憾,也不行;
    问题解决:尝试解决maven依赖找不到的n种姿势
  4. 怀疑是idea关于maven的配置有问题,比如在maven的编辑页面,不小心或者其他因素导致Work offline被勾选上了,那就导致依赖只会从本地找,而不是从私服找。打开一看,我的配置很正常。哎,这一步也尝试失败。
    问题解决:尝试解决maven依赖找不到的n种姿势
  5. 这个时候,有点怀疑是不是远程仓库是不是没有这个jar包,所以登录公司的私服,到对应的地址找。诶,这个版本下面怎么有这么多以时间戳命名的包,难道我还得以特定的时间戳版本下载吗?这个不科学,要知道这个版本是开发版本,是会随时更新的。所以这是什么回事呢???

到这里,我们就说到正题了,这个就涉及maven的高级配置了。在实际开发过程中,我们经常会遇到版本依赖的场景。比如服务A依赖服务B,而服务B处于开发阶段。假如服务B的当前版本是1.0,而服务A指定依赖了服务B的版本1.0。过了一段时间,服务B发现了bug,并进行修复了,所以升级为2.0。这样,服务A就得同时将服务B的版本升级为2.0,不然就可能出现问题。如果一直持续下去,我相信开发人员都会想吐血的。所以,这个时候就得引入mavenSnapshot版本机制。在开发过程中,服务B指定了对应的Snapshot版本,比如0.0.1-Snapshot,而服务A进行依赖B的时候就指定其Snapshot版本。服务B每次迭代更新的时候,发布到私服仓库的时候,都会形成带有时间戳命名的Snapshot版本,而服务A在构建的时候,都会下载服务B带有最新时间戳Snapshot版本。这样,问题就得到了完美解决。比如下图就是服务B带有时间戳Snapshot版本截图。
问题解决:尝试解决maven依赖找不到的n种姿势

解决方案

在项目的pom.xml文件,里面加上这些配置:

<repositories>
        <repository>
            <id>maven-releases</id>
            <name>maven-releases</name>
            <url>http://test.com:2000/repository/maven/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
  •  

结果

项目依赖顺利下载下来了,项目编译也没有问题了。看到项目pom.xml文件没有标红的时候,十分开心 ٩(๑❛ᴗ❛๑)۶

总结

开发过程中,总是会遇到各种问题。即使解决了,也得找到问题解决的原因。知其然才能有技术沉淀,当然也得记录下来。不然下次遇到相同的问题,也会忘记的 (๑╹◡╹)ノ"""

参考链接

Maven: working with multiple repositories

Maven Settings

Maven: introduction to repositories

上一篇:利用Chrome的Heap Snapshot功能分析一个时间段内的内存占用率


下一篇:IDEA中发布的javaweb项目是怎么和Tomcat联系上的?javaweb中的路径问题?javaweb中的绝对路径到底是相对的什么?绝对的什么文件夹路径?