为什么maven在错误的回购中寻找工件?

时间:2011-06-03 01:45:08

标签: maven jetty maven-3

我在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)

4 个答案:

答案 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设置为使用相关存储库进行身份验证,问题就消失了。