访问被拒绝的Maven,http://repo1.maven.org/maven2

我刚刚下载了Maven的最新版本。

而当我想跑

mvn archetype:generate

我收到错误消息

[警告]读取原型目录时出错http://repo1.maven.org/maven2 org.apache.maven.wagon.authorization.AuthorizationException:访问被拒绝: http: //repo1.maven.org/maven2,De reasonPhrase:拒绝访问。 org.apache.maven.wagon.shared.http4.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:928)org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:116)at org.apache.maven.wagon位于org.apache.maven.archetype.source的org.apache.maven.wagon.StreamWagon.get(StreamWagon.java:61)的.StreamWagon.getIfNewer(StreamWagon.java:88).RemoteCatalogArchetypeDataSource.downloadCatalog(RemoteCatalogArchetypeDataSource.java:119 )org.apache.mache.mache.z上的org.apache.maven.archetype.source.RemoteCatalogArchetypeDataSource.getArchetypeCatalog(RemoteCatalogArchetypeDataSource.java:87)org.apache.maven.archetype.DefaultArchetypeManager.getRemoteCatalog(DefaultArchetypeManager.java:216)。位于org.apache.maven.archetype.ui.generation.DefaultArchetypeSelector.selectArchetyp的org.apache.maven.archetype.ui.generation.DefaultArchetypeSelector.getArchetypesByCatalog(DefaultArchetypeSelector.java:200)的DefaultArchetypeManager.getRemoteCatalog(DefaultArchetypeManager.java:205) e(DefaultArchetypeSelector.java:71)org.apache.maven.archetype.mojos.CreateProjectFromArchetypeMojo.execute(CreateProjectFromArchetypeMojo.java:197)org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)at org位于org.apache.maven.lifecycle.internal的org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)的.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) .jojoExecutor.execute(MojoExecutor.java:145)org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java) :59)在org.apache的org.apache.maven.life.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)。 org.apache.maven.Defa上的maven.DefaultMaven.doExecute(DefaultMaven.java:320) org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)的ultMaven.execute(DefaultMaven.java:156)org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)org .apache.maven.cli.MavenCli.main(MavenCli.java:141)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(来自org.codehaus.plexus.classworlds.launcher.Launcher的org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)的java.lang.reflect.Method.invoke(未知来源)的未知来源.launch(Launcher.java:230)org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) )[警告]在远程目录中找不到原型。 默认为内部目录[INFO]未定义原型。 使用maven-archetype-quickstart(org.apache.maven.archetypes:maven-archetype-quickstart:1.0)

我没有代理和互联网工作正常。 防火墙已关闭。 如何解决这个问题呢 ?

谢谢你的帮助。

如果我们查看类org.apache.maven.wagon.shared.http4.AbstractHttpClientWagon方法fillInputData(InputData inputData),我们可以看到:

public void fillInputData( InputData inputData ) throws TransferFailedException, ResourceDoesNotExistException,AuthorizationException { .... HttpResponse response; .... statusCode = response.getStatusLine().getStatusCode(); .... switch ( statusCode ) { case HttpStatus.SC_OK: break; case HttpStatus.SC_NOT_MODIFIED: // return, leaving last modified set to original value so getIfNewer should return unmodified return; case SC_NULL: { TransferFailedException e = new TransferFailedException( "Failed to transfer file: " + url + reasonPhrase ); fireTransferError( resource, e, TransferEvent.REQUEST_GET ); throw e; } case HttpStatus.SC_FORBIDDEN: // <---------THIS fireSessionConnectionRefused(); throw new AuthorizationException( "Access denied to: " + url + reasonPhrase); .... } ... } 

因此我们在响应中遇到HTTP 403 Forbidden错误导致问题。 但我不知道该怎么办……


所以现在我们知道我们收到了FORBIDDEN错误,因为我们在HTTP请求中没有User-Agent。 Thanx到Patouche

似乎http://repo1.maven.org/maven2上的目录浏览已被关闭。 我不得不求助于自己获取原型目录。 我这样做了:

 mvn archetype:generate -DarchetypeCatalog=http://search.maven.org/remotecontent?filepath=archetype-catalog.xml 

或者,我想您可以从该链接下载archetype-catalog.xml文件,并将其放在.m2目录中,如本评论中所述:

http://jira.codehaus.org/browse/ARCHETYPE-202?focusedCommentId=182771&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-182771

似乎Apache中央存储库已经解决了这个问题。 所以没有做任何改变,现在问题就解决了。 如果有任何问题,请再试一次,告诉我们。

执行此命令。 它不仅会创建你的maven项目,还会解决下载archetype jar的问题。 这主要是由于原型URL不可用。

使用项目名称填写项目组ID。

mvn archetype:generate -DgroupId = {Project Group Id} -DartifactId = {Project Id} -DarchetypeArtifactId = maven-archetype-webapp -DinteractiveMode = false -DarchetypeCatalog = http://search.maven.org/remotecontent?filepath=archetype-的catalog.xml

它似乎与maven 2一起工作(在3台机器linux和windows上使用maven 3.05和maven 3.1复制问题)

问题仅发生在repo1 … url上。 如果删除本地存储库,所有插件下载都将正常工作,直到下载原型目录 – “访问被拒绝”