我如何让Maven使用正确的存储库?
我只是检查了一些项目,需要build立它们,但是我很早以前(也许是6个月)安装了Maven,真的没有用过它 – 我没有这个项目的pom.xml没有这个“ http://repo1.maven.org/myurlhere “其中的任何地方 – 它有绝对的url,该项目的maven回购,但maven仍然试图从一般的maven回购下载:
Macintosh:trunk$ mvn clean install [INFO] Scanning for projects... Downloading: http://repo1.maven.org/url/project/project/xx/project-xxpom [INFO] Unable to find resource 'url.project:project:pom:xx' in repository central (http://repo1.maven.org/) [INFO] ------------------------------------------------------------------------ [ERROR] FATAL ERROR [INFO] ------------------------------------------------------------------------ [INFO] Failed to resolve artifact. GroupId: url.project ArtifactId: project Version: xx Reason: Unable to download the artifact from any repository url.project:project:pom:xx from the specified remote repositories: central (http://repo1.maven.org/)
任何人都可以帮助我做我没有做的权利,基本上我只是从命令行中检查项目,cd到目录并运行“mvn干净安装” – 没有别的。 任何帮助是极大的赞赏。
该项目的pom.xml我没有这个“ http://repo1.maven.org/myurlhere ”在它的任何地方
所有项目默认情况下都有http://repo1.maven.org/声明为;<repository>
(和<pluginRepository>
)。 这个被称为中央仓库的仓库像其他的默认设置一样从“超级POM”(从超级POMinheritance的所有项目)inheritance。 因此,POM实际上是超级POM,任何父母POM和当前POM的组合。 这个组合称为“有效POM”,可以使用Maven Help插件的effective-pom
目标(可用于debugging)打印。
事实上,如果你运行:
mvn help:effective-pom
您至less会看到以下内容:
<repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Maven Repository Switchboard</name> <url>http://repo1.maven.org/maven2</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <releases> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Maven Plugin Repository</name> <url>http://repo1.maven.org/maven2</url> </pluginRepository> </pluginRepositories>
它有绝对的地方,该项目的maven回购是maven仍然试图从一般的maven回购下载
Maven会试图find所有已声明的存储库中的依赖关系,包括在我们看到的默认存储库中。 但是,根据你所显示的跟踪,你只有一个存储库定义(中央存储库)或maven会打印这样的东西:
Reason: Unable to download the artifact from any repository url.project:project:pom:xx from the specified remote repositories: central (http://repo1.maven.org/), another-repository (http://another/repository)
所以,基本上,maven无法findurl.project:project:pom:xx
因为它在中央不可用。
但是不知道你已经检出了哪个项目(它可能有特定的指令),或者缺less哪个依赖项(可能会在另一个仓库中find它),这是不可能的。
默认情况下,Maven将始终在官方的Maven仓库中查找,该仓库是http://repo1.maven.org 。
当Maven试图构build一个项目时,它会查看你的本地仓库(默认为~/.m2/repository
但你可以通过改变~/.m2/settings.xml
的<localRepository>
值来configuration它)依赖,插件或报告在您的pom.xml
定义。 如果在本地存储库中没有find足够的工件,它将查找所有configuration的外部存储库,从默认的http://repo1.maven.org开始; 。
您可以通过在settings.xml
文件中设置镜像来configurationMaven来避免这个默认的存储库:
<mirrors> <mirror> <id>repoMirror</id> <name>Our mirror for Maven repository</name> <url>http://the/server/</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors>
这样,Maven将不会联系http://repo1.maven.org
,而是联系您的企业存储库(本例中为http://the/server
)。
如果你想添加另一个仓库,你可以在你的settings.xml文件中定义一个新仓库:
<profiles> <profile> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>foo.bar</id> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> <url>http://new/repository/server</url> </repository> </repositories>
你可以在这里看到完整的settings.xml
模型。
关于clean
过程,您可以让Maven 离线运行它。 在这种情况下,Maven不会尝试访问任何外部存储库:
mvn -o clean
基本上,所有的Maven都告诉你,你的项目中的某些依赖项在中央Maven仓库中是不可用的。 默认情况下,查看您的本地.m2文件夹(本地存储库),然后查看您的POM中的任何configuration的存储库,然后中央maven存储库。 查看Maven参考的存储库部分 。
问题在于,检入的项目没有configurationPOM,因此可以find所有依赖关系,并且可以从头开始构build项目。