mirror of
https://github.com/apache/maven.git
synced 2025-02-08 11:05:37 +00:00
MNG-7529 alternate fix (#795)
[MNG-7529] Maven resolver makes bad repository choices Structure the version checks slightly different to make the separation between repository versions and the version range resolution clearer.
This commit is contained in:
parent
ce4579108d
commit
e410a6ce1d
@ -19,6 +19,7 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import org.apache.maven.artifact.ArtifactUtils;
|
||||||
import org.apache.maven.artifact.repository.metadata.Versioning;
|
import org.apache.maven.artifact.repository.metadata.Versioning;
|
||||||
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
|
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
|
||||||
import org.eclipse.aether.RepositoryEvent;
|
import org.eclipse.aether.RepositoryEvent;
|
||||||
@ -69,8 +70,6 @@ public class DefaultVersionRangeResolver
|
|||||||
|
|
||||||
private static final String MAVEN_METADATA_XML = "maven-metadata.xml";
|
private static final String MAVEN_METADATA_XML = "maven-metadata.xml";
|
||||||
|
|
||||||
private static final String SNAPSHOT = "SNAPSHOT";
|
|
||||||
|
|
||||||
private final MetadataResolver metadataResolver;
|
private final MetadataResolver metadataResolver;
|
||||||
private final SyncContextFactory syncContextFactory;
|
private final SyncContextFactory syncContextFactory;
|
||||||
private final RepositoryEventDispatcher repositoryEventDispatcher;
|
private final RepositoryEventDispatcher repositoryEventDispatcher;
|
||||||
@ -185,11 +184,12 @@ private Map<String, ArtifactRepository> getVersions( RepositorySystemSession ses
|
|||||||
}
|
}
|
||||||
|
|
||||||
Versioning versioning = readVersions( session, trace, metadataResult.getMetadata(), repository, result );
|
Versioning versioning = readVersions( session, trace, metadataResult.getMetadata(), repository, result );
|
||||||
RemoteRepository remoteRepository = metadataResult.getRequest().getRepository();
|
|
||||||
|
versioning = filterVersionsByRepositoryType( versioning, metadataResult.getRequest().getRepository() );
|
||||||
|
|
||||||
for ( String version : versioning.getVersions() )
|
for ( String version : versioning.getVersions() )
|
||||||
{
|
{
|
||||||
if ( isEnabled( remoteRepository, version ) && !versionIndex.containsKey( version ) )
|
if ( !versionIndex.containsKey( version ) )
|
||||||
{
|
{
|
||||||
versionIndex.put( version, repository );
|
versionIndex.put( version, repository );
|
||||||
}
|
}
|
||||||
@ -199,18 +199,6 @@ private Map<String, ArtifactRepository> getVersions( RepositorySystemSession ses
|
|||||||
return versionIndex;
|
return versionIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isEnabled( RemoteRepository remoteRepository, String version )
|
|
||||||
{
|
|
||||||
if ( remoteRepository == null )
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean snapshot = version != null && version.endsWith( SNAPSHOT );
|
|
||||||
|
|
||||||
return remoteRepository.getPolicy( snapshot ).isEnabled();
|
|
||||||
}
|
|
||||||
|
|
||||||
private Versioning readVersions( RepositorySystemSession session, RequestTrace trace, Metadata metadata,
|
private Versioning readVersions( RepositorySystemSession session, RequestTrace trace, Metadata metadata,
|
||||||
ArtifactRepository repository, VersionRangeResult result )
|
ArtifactRepository repository, VersionRangeResult result )
|
||||||
{
|
{
|
||||||
@ -242,6 +230,26 @@ private Versioning readVersions( RepositorySystemSession session, RequestTrace t
|
|||||||
return ( versioning != null ) ? versioning : new Versioning();
|
return ( versioning != null ) ? versioning : new Versioning();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Versioning filterVersionsByRepositoryType( Versioning versioning, RemoteRepository remoteRepository )
|
||||||
|
{
|
||||||
|
if ( remoteRepository == null )
|
||||||
|
{
|
||||||
|
return versioning;
|
||||||
|
}
|
||||||
|
|
||||||
|
Versioning filteredVersions = versioning.clone();
|
||||||
|
|
||||||
|
for ( String version : versioning.getVersions() )
|
||||||
|
{
|
||||||
|
if ( !remoteRepository.getPolicy( ArtifactUtils.isSnapshot( version ) ).isEnabled() )
|
||||||
|
{
|
||||||
|
filteredVersions.removeVersion( version );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return filteredVersions;
|
||||||
|
}
|
||||||
|
|
||||||
private void invalidMetadata( RepositorySystemSession session, RequestTrace trace, Metadata metadata,
|
private void invalidMetadata( RepositorySystemSession session, RequestTrace trace, Metadata metadata,
|
||||||
ArtifactRepository repository, Exception exception )
|
ArtifactRepository repository, Exception exception )
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user