1.问题描述
最近在实现通过Java爬虫获取网页源码,然后紧接着将源码转换为图片上传到OSS服务器,其中探索了很多办法,但是在实现过程中遇到一个奇葩问题,就是我无论下载任何Maven依赖,都无法正常下载,简直是理了个大谱,经过网上多方面查阅资料后终得知原因。
我遇到的具体报错信息如下所示:
1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method 'void <init>()' not foundat org.jetbrains.idea.maven.server.embedder.CustomModelValidator.<init>(Unknown Source)while locating org.jetbrains.idea.maven.server.embedder.CustomModelValidatorat ClassRealm[maven.ext, parent: ClassRealm[plexus.core, parent: null]] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)while locating org.apache.maven.model.validation.ModelValidator annotated with @com.google.inject.name.Named(value="ide")1 errorrole: org.apache.maven.model.validation.ModelValidatorroleHint: ideat org.jetbrains.idea.maven.server.Maven3XServerEmbedder.getComponent(Maven3XServerEmbedder.java:489)at org.jetbrains.idea.maven.server.Maven3XServerEmbedder.customizeComponents(Maven3XServerEmbedder.java:578)at org.jetbrains.idea.maven.server.Maven3XServerEmbedder.customize(Maven3XServerEmbedder.java:546)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:566)at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)at java.base/java.security.AccessController.doPrivileged(Native Method)at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)at java.base/java.security.AccessController.doPrivileged(Native Method)at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)at java.base/java.lang.Thread.run(Thread.java:834)at java.rmi/sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:303)at java.rmi/sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:279)at java.rmi/sun.rmi.server.UnicastRef.invoke(UnicastRef.java:164)at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:217)at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:162)at com.sun.proxy.$Proxy151.customize(Unknown Source)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:566)at com.intellij.execution.rmi.RemoteUtil.invokeRemote(RemoteUtil.java:155)at com.intellij.execution.rmi.RemoteUtil.access$400(RemoteUtil.java:25)at com.intellij.execution.rmi.RemoteUtil$1.lambda$invoke$0(RemoteUtil.java:139)at com.intellij.openapi.util.ClassLoaderUtil.computeWithClassLoader(ClassLoaderUtil.java:31)at com.intellij.execution.rmi.RemoteUtil.executeWithClassLoader(RemoteUtil.java:207)at com.intellij.execution.rmi.RemoteUtil$1.invoke(RemoteUtil.java:139)at com.sun.proxy.$Proxy151.customize(Unknown Source)at org.jetbrains.idea.maven.server.MavenEmbedderWrapper.doCustomize(MavenEmbedderWrapper.java:92)at org.jetbrains.idea.maven.server.MavenEmbedderWrapper.onWrappeeCreated(MavenEmbedderWrapper.java:45)at org.jetbrains.idea.maven.server.RemoteObjectWrapper.getOrCreateWrappee(RemoteObjectWrapper.java:42)at org.jetbrains.idea.maven.server.MavenEmbedderWrapper.doCustomize(MavenEmbedderWrapper.java:92)at org.jetbrains.idea.maven.server.MavenEmbedderWrapper.lambda$customizeForResolve$1(MavenEmbedderWrapper.java:65)at org.jetbrains.idea.maven.server.RemoteObjectWrapper.perform(RemoteObjectWrapper.java:76)at org.jetbrains.idea.maven.server.MavenEmbedderWrapper.customizeForResolve(MavenEmbedderWrapper.java:64)at org.jetbrains.idea.maven.server.MavenEmbedderWrapper.customizeForResolve(MavenEmbedderWrapper.java:58)at org.jetbrains.idea.maven.project.MavenProjectResolver.executeWithEmbedder(MavenProjectResolver.java:285)at org.jetbrains.idea.maven.project.MavenProjectResolver.resolveFolders(MavenProjectResolver.java:216)at org.jetbrains.idea.maven.project.MavenProjectsProcessorFoldersResolvingTask.perform(MavenProjectsProcessorFoldersResolvingTask.java:40)at org.jetbrains.idea.maven.project.MavenProjectsProcessor.doProcessPendingTasks(MavenProjectsProcessor.java:141)at org.jetbrains.idea.maven.project.MavenProjectsProcessor.access$000(MavenProjectsProcessor.java:35)at org.jetbrains.idea.maven.project.MavenProjectsProcessor$1.run(MavenProjectsProcessor.java:110)at org.jetbrains.idea.maven.utils.MavenUtil.lambda$runInBackground$5(MavenUtil.java:488)at com.intellij.util.RunnableCallable.call(RunnableCallable.java:20)at com.intellij.util.RunnableCallable.call(RunnableCallable.java:11)at com.intellij.openapi.application.impl.ApplicationImpl$1.call(ApplicationImpl.java:255)at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.RuntimeException: org.codehaus.plexus.component.repository.exception.ComponentLook
2.本地环境介绍
1.IDEA版本:2021.2.2
2.Maven版本:3.8.8
3.探索方法
但是按照我的理解,这个错误似乎是由于依赖冲突或版本不匹配引起的。
因此我可能的解决方案包括:
-
更新依赖版本:尝试将 Maven 相关的依赖更新到兼容的版本,以解决方法缺失的问题。尝试更新 Maven 或相关库的版本,看看是否解决了问题。
-
排除冲突依赖:检查的 Maven 依赖树,确保没有不必要的依赖或者版本冲突。可以通过 Maven 的
dependency:tree
命令来查看依赖树,并且通过<exclusions>
标签排除不需要的依赖。 -
清理 Maven 本地仓库:有时本地 Maven 仓库中的某些文件可能损坏或不完整。可以尝试删除 Maven 本地仓库中与该依赖相关的文件,然后再次构建项目,让 Maven 重新下载依赖。
-
查看 IDE 配置:这个错误似乎与 IDE(可能是 IntelliJ IDEA)相关,可能是 IDE 中的某些配置导致的问题。可以尝试更新 IDE,或者查看 IDE 的相关配置是否正确。
按照上述方式探索了很久,结果总是无济于事!
4.解决方法
最终我得知发生问题的原因就是IDEA无法兼容高版本的Maven,因此报错异常!
简单来说就是,IDEA只能兼容版本比其发布时间晚的Maven环境,具体可以通过maven官网查询每一maven版本的发布时间,具体如下图所示:
由图中可知,我的3.8.8版本的maven发布时间是2023-03-08,时间上晚于2021年2月,因此我当前的IDEA无法兼容如此高版本的maven环境。所以,当我切换了低版本的Maven环境之后就可以正常下载maven依赖并进行后续的开发工作了!