2011-06-03 53 views
12

我在一个Maven 3项目中定义了一个依赖pom.xml。依赖关系是如下:为什么maven在错误的回购中寻找神器?

<repository> 
    <id>java.net</id> 
    <name>java.net</name> 
    <url>http://download.java.net/maven/2</url> 
</repository> 

工件确实存在于所述存储库:

<dependency> 
    <groupId>org.glassfish.web</groupId> 
    <artifactId>el-impl</artifactId> 
    <scope>runtime</scope> 
    <version>2.2</version> 
</dependency> 

Repostory在POM描述如下。 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) 

回答

17

您定义的repository用于依存关系,但不是对于plugins。因此错误。

为了解决这个问题,你需要定义pluginRepositories

<project> 
    <!-- ... --> 

    <pluginRepositories> 
     <pluginRepository> 
      <id>{repo.id}</id> 
      <url>{repo.url}</url> 
     </pluginRepository> 
    </pluginRepositories> 
</project> 

至于你应该指定 - 在pom.xml中或settings.xml中,阅读this SO post

1

你需要检查你的Maven 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中心存储库的位置,如果你不想做太多的配置。

干杯!

相关问题