[ http://jira.codehaus.org/browse/MNG-2098?page=all ]
John Casey updated MNG-2098: ---------------------------- Fix Version: 2.1 > Artifact resolver incorrectly selects repository which doesn't contain the > selected version > ------------------------------------------------------------------------------------------- > > Key: MNG-2098 > URL: http://jira.codehaus.org/browse/MNG-2098 > Project: Maven 2 > Type: Bug > Components: Artifacts and Repositories > Versions: 2.0.2 > Reporter: Garrett Conaty > Fix For: 2.1 > Attachments: MNG-2098.simplefix.diff, pom.xml > > > The current logic for resolution of an artifact which has groupId/artifactId > and then a range is for the DefaultArtifactCollector to call > MavenMetadataSource and retrieve the available versions and then match the > available versions to the range. > However, a side effect exists in that the DefaultRepositoryMetadataManager in > its call to mergeMetadata sets the repository for the artifact. It currently > just sets it to the last repository that had versions to merge. What occurs > here though is that it can be set to a repository that doesn't actually have > the artifact that is selected as part of the match of version range to > available versions. Then when this artifact is passed to the resolver to > download the JAR it references, it of course can't find it and an exception > is thrown. > So there are a couple of issues here > 1) Should the DefaultArtifactResolver really use artifact.getRepository() > exclusively if it's not null? Perhaps the Artifact really ought to contain a > list of repositories that are acceptable (from the transformation phase) from > which to try. This may be a good enhancment. > but the more pressing issue is > 2) Shouldn't the DefaultArtifactCollector actually do the repository > selection, not have it be a side effect of getting the metadata. > The simple patch I've attached solves the problem by just removing the call > to setRepository in the mergeMetadata method. This has the effect that there > will be no repository chosen by the time the DefaultArtifactResolver gets a > hold of the artifact and it will then go through the list of > remoteRepositories until it finds a succesful match. > What I'd like to do though is really modify the DefaultArtifactCollector and > MavenMetadataSource so that the collector can make the decision about what > repository/list of repositories to use, and in the very least choose the > repository that has the version that was matched in the range. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira