Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.TreeSet;

import javax.inject.Inject;
Expand Down Expand Up @@ -56,7 +57,6 @@
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.MetadataRequest;
import org.eclipse.aether.resolution.MetadataResult;
import org.eclipse.aether.util.version.GenericVersionScheme;
import org.eclipse.aether.version.InvalidVersionSpecificationException;
import org.eclipse.aether.version.Version;
import org.eclipse.aether.version.VersionScheme;
Expand All @@ -75,17 +75,29 @@ public class DefaultPluginVersionResolver

private static final String REPOSITORY_CONTEXT = "plugin";

@Inject
private Logger logger;
private final Logger logger;

@Inject
private RepositorySystem repositorySystem;
private final RepositorySystem repositorySystem;

@Inject
private MetadataReader metadataReader;
private final MetadataReader metadataReader;

private final MavenPluginManager pluginManager;

private final VersionScheme versionScheme;

@Inject
private MavenPluginManager pluginManager;
public DefaultPluginVersionResolver( final Logger logger,
final RepositorySystem repositorySystem,
final MetadataReader metadataReader,
final MavenPluginManager pluginManager,
final VersionScheme versionScheme )
{
this.logger = Objects.requireNonNull( logger );
this.repositorySystem = Objects.requireNonNull( repositorySystem );
this.metadataReader = Objects.requireNonNull( metadataReader );
this.pluginManager = Objects.requireNonNull( pluginManager );
this.versionScheme = Objects.requireNonNull( versionScheme );
}

public PluginVersionResult resolve( PluginVersionRequest request )
throws PluginVersionResolutionException
Expand Down Expand Up @@ -175,8 +187,6 @@ else if ( StringUtils.isNotEmpty( versions.latestVersion ) )

if ( version == null )
{
VersionScheme versionScheme = new GenericVersionScheme();

TreeSet<Version> releases = new TreeSet<>( Collections.reverseOrder() );
TreeSet<Version> snapshots = new TreeSet<>( Collections.reverseOrder() );

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@
import org.apache.commons.lang3.Validate;
import org.apache.maven.rtinfo.RuntimeInformation;
import org.codehaus.plexus.logging.Logger;
import org.eclipse.aether.util.version.GenericVersionScheme;
import org.eclipse.aether.version.InvalidVersionSpecificationException;
import org.eclipse.aether.version.Version;
import org.eclipse.aether.version.VersionConstraint;
import org.eclipse.aether.version.VersionScheme;

import java.io.IOException;
import java.io.InputStream;
import java.util.Objects;
import java.util.Properties;

import javax.inject.Inject;
Expand All @@ -45,64 +45,73 @@
public class DefaultRuntimeInformation
implements RuntimeInformation
{
private final Logger logger;

@Inject
private Logger logger;
private final VersionScheme versionScheme;

private String mavenVersion;
private final String mavenVersion;

public String getMavenVersion()
@Inject
public DefaultRuntimeInformation( final Logger logger,
final VersionScheme versionScheme )
{
if ( mavenVersion == null )
{
Properties props = new Properties();
this.logger = Objects.requireNonNull( logger );
this.versionScheme = Objects.requireNonNull( versionScheme );
this.mavenVersion = locateMavenVersion();
}

private String locateMavenVersion()
{
Properties props = new Properties();

String resource = "META-INF/maven/org.apache.maven/maven-core/pom.properties";
String resource = "META-INF/maven/org.apache.maven/maven-core/pom.properties";

try ( InputStream is = DefaultRuntimeInformation.class.getResourceAsStream( "/" + resource ) )
try ( InputStream is = DefaultRuntimeInformation.class.getResourceAsStream( "/" + resource ) )
{
if ( is != null )
{
if ( is != null )
{
props.load( is );
}
else
{
logger.warn(
"Could not locate " + resource + " on classpath, Maven runtime information not available" );
}
props.load( is );
}
catch ( IOException e )
else
{
String msg = "Could not parse " + resource + ", Maven runtime information not available";
if ( logger.isDebugEnabled() )
{
logger.warn( msg, e );
}
else
{
logger.warn( msg );
}
logger.warn(
"Could not locate " + resource + " on classpath, Maven runtime information not available" );
}

String version = props.getProperty( "version", "" ).trim();

if ( !version.startsWith( "${" ) )
}
catch ( IOException e )
{
String msg = "Could not parse " + resource + ", Maven runtime information not available";
if ( logger.isDebugEnabled() )
{
mavenVersion = version;
logger.warn( msg, e );
}
else
{
mavenVersion = "";
logger.warn( msg );
}
}

String version = props.getProperty( "version", "" ).trim();

if ( !version.startsWith( "${" ) )
{
return version;
}
else
{
return "";
}
}

@Override
public String getMavenVersion()
{
return mavenVersion;
}

@Override
public boolean isMavenVersion( String versionRange )
{
VersionScheme versionScheme = new GenericVersionScheme();

Validate.notBlank( versionRange, "versionRange can neither be null, empty nor blank" );

VersionConstraint constraint;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,18 +78,22 @@ public class DefaultVersionRangeResolver

private RepositoryEventDispatcher repositoryEventDispatcher;

private final VersionScheme versionScheme;

public DefaultVersionRangeResolver()
{
// enable default constructor
this.versionScheme = new GenericVersionScheme();
}

@Inject
DefaultVersionRangeResolver( MetadataResolver metadataResolver, SyncContextFactory syncContextFactory,
RepositoryEventDispatcher repositoryEventDispatcher )
RepositoryEventDispatcher repositoryEventDispatcher, VersionScheme versionScheme )
{
setMetadataResolver( metadataResolver );
setSyncContextFactory( syncContextFactory );
setRepositoryEventDispatcher( repositoryEventDispatcher );
this.versionScheme = Objects.requireNonNull( versionScheme );
}

public void initService( ServiceLocator locator )
Expand Down Expand Up @@ -124,8 +128,6 @@ public VersionRangeResult resolveVersionRange( RepositorySystemSession session,
{
VersionRangeResult result = new VersionRangeResult( request );

VersionScheme versionScheme = new GenericVersionScheme();

VersionConstraint versionConstraint;
try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
import org.eclipse.aether.impl.VersionRangeResolver;
import org.eclipse.aether.impl.VersionResolver;
import org.eclipse.aether.impl.guice.AetherModule;
import org.eclipse.aether.util.version.GenericVersionScheme;
import org.eclipse.aether.version.VersionScheme;

/**
* MavenResolverModule
Expand All @@ -46,6 +48,7 @@ public final class MavenResolverModule
protected void configure()
{
install( new AetherModule() );
bind( VersionScheme.class ).toInstance( new GenericVersionScheme() );
bind( ArtifactDescriptorReader.class ).to( DefaultArtifactDescriptorReader.class ).in( Singleton.class );
bind( VersionResolver.class ).to( DefaultVersionResolver.class ).in( Singleton.class );
bind( VersionRangeResolver.class ).to( DefaultVersionRangeResolver.class ).in( Singleton.class );
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package org.apache.maven.repository.internal;

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

import org.eclipse.aether.util.version.GenericVersionScheme;
import org.eclipse.aether.version.VersionScheme;

import javax.inject.Named;
import javax.inject.Provider;
import javax.inject.Singleton;

/**
* Provider of {@link org.eclipse.aether.util.version.GenericVersionScheme}.
*/
@Named
@Singleton
public class VersionSchemeProvider
Copy link
Copy Markdown
Member

@michael-o michael-o May 2, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need this provider If GenericVersionScheme is properly annotated? Where is it used?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to review this and refresh my memory. But the idea was to have some sort of indirection, if we want to introduce other kind than "generic" version support... Consider this PR as draft pls

implements Provider<VersionScheme>
{
private final VersionScheme genericVersionScheme;

public VersionSchemeProvider()
{
this.genericVersionScheme = new GenericVersionScheme();
}

@Override
public VersionScheme get()
{
return genericVersionScheme;
}
}