最近因为使用maven构建java代码遇到依赖的问题,折腾我了两三天才找到解决的办法,从报错信息来看就是提示
com.github.ulisesbocchio:jasypt-spring-boot-starter这个依赖找不到,但是在本地仓库检查发现是有这个依赖存在的,而私服仓库中也存在这个依赖包,通过网上搜索到的方法删除了该目录下的_remote.repositories和lastUpadted文件文件,还有重新删除本地仓库的对应目录再次拉取统统都不起作用,总之,尝试了很多办法就是搞不定。
[ERROR] Failed to execute goal on project iesmp-common: Could not resolve dependencies for project com.transfar.iesmp:iesmp-common:jar:0.0.1-SNAPSHOT: Failed to collect dependencies at com.github.ulisesbocchio:jasypt-spring-boot-starter:jar:2.0.0: Failed to read artifact descriptor for com.github.ulisesbocchio:jasypt-spring-boot-starter:jar:2.0.0: Failure to find org.springframework.cloud:spring-cloud-dependencies:pom:Finchley.M8 in http://192.168.30.112:9081/repository/maven-public/ was cached in the local repository, resolution will not be reattempted until the update interval of nexus has elapsed or updates are forced -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project iesmp-common: Could not resolve dependencies for project com.transfar.iesmp:iesmp-common:jar:0.0.1-SNAPSHOT: Failed to collect dependencies at com.github.ulisesbocchio:jasypt-spring-boot-starter:jar:2.0.0
at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:269)
at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies (LifecycleDependencyResolver.java:147)
at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved (MojoExecutor.java:248)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:202)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: org.apache.maven.project.DependencyResolutionException: Could not resolve dependencies for project com.transfar.iesmp:iesmp-common:jar:0.0.1-SNAPSHOT: Failed to collect dependencies at com.github.ulisesbocchio:jasypt-spring-boot-starter:jar:2.0.0
最终找到这个问题的解决办法是有点偶然因素的,为了避免其他的干扰我创建一个最简单的maven项目,在pom.xml文件只添加了这一项
jasypt-spring-boot-starter依赖配置。测试发现maven的settings.xml注释私服仓库的镜像,仅保留阿里云镜像,执行mvn clean install是成功的。

而再次将maven的settings.xml恢复私服仓库的镜像配置,执行mvn clean install失败,上报了一样的依赖错误。

两次构建唯一的区别就在于私服的配置,第一次构建成功说明本地仓库依赖已经存在,而第二构建的原因从日志来看明显是因为从私服仓库找不到依赖导致的,不管私服仓库有没有这个依赖,都会使人疑惑为什么maven不直接使用本地仓库的依赖哪?
网上搜索发现maven3使用了_remote.repositories文件标示了资源的来源。如果你有这个文件,那么在访问本地资源的同时,必须确保远程仓库上也有该资源才行。否则就会报错。
_remote.repositories文件的作用是标示资源的来源。它可以帮助Maven确定资源是否来自远程仓库,以及是否需要从远程仓库获取更新。这样,Maven就可以更好地管理依赖关系,确保项目构建的正确性。
但是之前我已经尝试了删除
jasypt-spring-boot-starter依赖下的_remote.repositories,重新构建依然报同样的错误,这个具体原因不确定,怀疑是这个依赖本身还有其他的依赖,而其他依赖中也有这个文件,导致始终要检查远程仓库,而远程仓库没有找到而报错。于是尝试把本地仓库中的所有的_remote.repositories文件都删除,重新构建果然不再检查远程仓库了,再次构建成功了。
find ./repository/ -name "_remote.repositories" | xargs rm -f;
注:奇怪的是构建成功后,我尝试重新加入_remote.repositories这个文件,再次构建也没有再报错了,真是搞不懂为什么。




