Yoav Abrahami created MNG-5250:
----------------------------------
Summary: DefaultVersionResolver.readVersions reads snapshot
versions from release only repositories
Key: MNG-5250
URL: https://jira.codehaus.org/browse/MNG-5250
Project: Maven 2 & 3
Issue Type: Bug
Components: Dependencies, Embedding
Affects Versions: 3.0.4
Environment: embedded maven
Reporter: Yoav Abrahami
with the below repositories configuration in settings.xml [1]
I get an error that a parent of a project is not found if the parent version is
marked as LATEST.
The actual error is
"Could not find artifact XXX in snapshots (URL of SNAPSHOT repository)"
while debugging the reason, I have found that because the
DefaultVersionResolver.readVersions() method returns SNAPSHOT versions when
reading versions from a release only repository (repository with snapshot
policy not enabled).
The fix I have in place is to add to the DefaultVersionResolver.readVersions()
method the following fragment:
(see the full method below [2]
{code}
/*
* fix for LATEST - repository who does not support snapshots should not return
shapshot versions
*/
if (versioning != null && repository instanceof RemoteRepository) {
RemoteRepository remoteRepository = (RemoteRepository)repository;
if (!remoteRepository.getPolicy(true).isEnabled()) {
Versioning repaired = new Versioning();
repaired.setLastUpdated(versioning.getLastUpdated());
repaired.setRelease(versioning.getRelease());
repaired.setVersions(versioning.getVersions());
versioning = repaired;
}
}
{code}
[1] :
{code}
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-releases</name>
<url>http://repo.dev.wix/artifactory/libs-releases</url>
</repository>
<repository>
<snapshots />
<id>snapshots</id>
<name>libs-snapshots</name>
<url>http://repo.dev.wix/artifactory/libs-snapshots</url>
</repository>
</repositories>
{code}
[2] :
{code}
private Versioning readVersions( RepositorySystemSession session,
RequestTrace trace, Metadata metadata,
ArtifactRepository repository,
VersionResult result )
{
Versioning versioning = null;
FileInputStream fis = null;
try
{
if ( metadata != null )
{
SyncContext syncContext = syncContextFactory.newInstance(
session, true );
try
{
syncContext.acquire( null, Collections.singleton( metadata
) );
if ( metadata.getFile() != null &&
metadata.getFile().exists() )
{
fis = new FileInputStream( metadata.getFile() );
org.apache.maven.artifact.repository.metadata.Metadata
m =
new MetadataXpp3Reader().read( fis, false );
versioning = m.getVersioning();
/*
* NOTE: Users occasionally misuse the id "local" for
remote repos which screws up the metadata
* of the local repository. This is especially
troublesome during snapshot resolution so we try
* to handle that gracefully.
*/
if ( versioning != null && repository instanceof
LocalRepository )
{
if ( versioning.getSnapshot() != null &&
versioning.getSnapshot().getBuildNumber() > 0 )
{
Versioning repaired = new Versioning();
repaired.setLastUpdated(
versioning.getLastUpdated() );
Snapshot snapshot = new Snapshot();
snapshot.setLocalCopy( true );
repaired.setSnapshot( snapshot );
versioning = repaired;
throw new IOException( "Snapshot information
corrupted with remote repository data"
+ ", please verify that no remote
repository uses the id '" + repository.getId()
+ "'" );
}
}
/*
* fix for LATEST - repository who does not support
snapshots should not return shapshot versions
*/
if (versioning != null && repository instanceof
RemoteRepository) {
RemoteRepository remoteRepository =
(RemoteRepository)repository;
if (!remoteRepository.getPolicy(true).isEnabled()) {
Versioning repaired = new Versioning();
repaired.setLastUpdated(versioning.getLastUpdated());
repaired.setRelease(versioning.getRelease());
repaired.setVersions(versioning.getVersions());
versioning = repaired;
}
}
}
}
finally
{
syncContext.release();
}
}
}
catch ( Exception e )
{
invalidMetadata( session, trace, metadata, repository, e );
result.addException( e );
}
finally
{
IOUtil.close( fis );
}
return ( versioning != null ) ? versioning : new Versioning();
}
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira