我在Maven 3项目中的pom.xml
中定义了一个依赖项。依赖性如下:
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>el-impl</artifactId>
<scope>runtime</scope>
<version>2.2</version>
</dependency>
Repostory在pom中描述如下:
<repository>
<id>java.net</id>
<name>java.net</name>
<url>http://download.java.net/maven/2</url>
</repository>
Artifact确实存在于存储库中。 It's easy to check。尽管如此,Maven正试图从repo1.maven.org
获取神器。 这可能是什么原因?也许我在定义存储库访问时犯了一些关键错误?其他依赖似乎没问题。
Plugin org.mortbay.jetty:maven-jetty-plugin:6.1.26 or one of its
dependencies could not be resolved: Could not find artifact
org.glassfish.web:el-impl:jar:2.2
in central (http://repo1.maven.org/maven2)
答案 0 :(得分:17)
您定义的repository
用于依赖关系,但{strong> 用于plugins
。因此错误。
要解决此问题,您需要定义pluginRepositories:
<project>
<!-- ... -->
<pluginRepositories>
<pluginRepository>
<id>{repo.id}</id>
<url>{repo.url}</url>
</pluginRepository>
</pluginRepositories>
</project>
至于你应该指定的位置 - 在pom.xml或settings.xml中,阅读this SO post。
答案 1 :(得分:1)
您需要检查您的专家settings.xml
(查看Maven文件夹:M2_HOME/conf
)。
默认存储库本身定义,Maven中央存储库优先。
在Maven的settings.xml
中定义您的存储库,如下所示:
<profiles>
<profile>
...
<repositories>
<repository>
<id>Java Net</id>
<name>Java Net</name>
<releases>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
<url>http://download.java.net/maven/2</url>
<layout>default</layout>
</repository>
</repositories>
<pluginRepositories>
...
</pluginRepositories>
...
</profile>
如果您不想进行太多配置,可以使用自己覆盖默认的Maven中央存储库位置。
干杯!
答案 2 :(得分:0)
但是,我遇到了类似的问题,另一个开发人员设置了一个镜像,因为我只是将其复制粘贴到我的settings.xml文件中。修改mirrorOf属性以仅包括特定的存储库就可以解决问题。
答案 3 :(得分:0)
就我而言,真正的根本问题是存储库需要身份验证。但是出于某种原因,maven决定最好不告诉我,而使用 <repositories>
列表中的第一个存储库,并抛出Could not find artifact
错误该回购。
移动了包含软件包的存储库,使其成为<repositories>
列表中的第一个存储库之后,它开始向我显示“权限被拒绝”消息。一旦将maven设置为使用相关存储库进行身份验证,问题就消失了。