You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2021/10/04 09:55:55 UTC

[maven] branch master updated: [MNG-7103] VersionScheme provider (#563)

This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new 69ee0c8  [MNG-7103] VersionScheme provider (#563)
69ee0c8 is described below

commit 69ee0c8b593e943fd0e12447acc1725ee1ca56df
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Mon Oct 4 11:55:18 2021 +0200

    [MNG-7103] VersionScheme provider (#563)
    
    This PR makes VersionScheme a component, is injected where needed
    (instead of ad-hoc instantiation), but provides room for
    different schemas, as GenericVersionScheme is "default"
    but now nothing stops to add other schemes as well.
---
 .../internal/DefaultPluginVersionResolver.java     |  9 +--
 .../rtinfo/internal/DefaultRuntimeInformation.java | 79 ++++++++++++----------
 .../internal/DefaultVersionRangeResolver.java      | 11 +--
 .../internal/DefaultVersionSchemeProvider.java     | 49 ++++++++++++++
 .../repository/internal/MavenResolverModule.java   |  2 +
 5 files changed, 106 insertions(+), 44 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java b/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
index 8cd1033..294750f 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
@@ -59,7 +59,6 @@ import org.eclipse.aether.repository.ArtifactRepository;
 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;
@@ -85,18 +84,22 @@ public class DefaultPluginVersionResolver
     private final RepositorySystem repositorySystem;
     private final MetadataReader metadataReader;
     private final MavenPluginManager pluginManager;
+    private final VersionScheme versionScheme;
 
     @Inject
     public DefaultPluginVersionResolver(
             RepositorySystem repositorySystem,
             MetadataReader metadataReader,
-            MavenPluginManager pluginManager )
+            MavenPluginManager pluginManager,
+            VersionScheme versionScheme )
     {
         this.repositorySystem = repositorySystem;
         this.metadataReader = metadataReader;
         this.pluginManager = pluginManager;
+        this.versionScheme = versionScheme;
     }
 
+    @Override
     public PluginVersionResult resolve( PluginVersionRequest request )
         throws PluginVersionResolutionException
     {
@@ -199,8 +202,6 @@ public class DefaultPluginVersionResolver
 
         if ( version == null )
         {
-            VersionScheme versionScheme = new GenericVersionScheme();
-
             TreeSet<Version> releases = new TreeSet<>( Collections.reverseOrder() );
             TreeSet<Version> snapshots = new TreeSet<>( Collections.reverseOrder() );
 
diff --git a/maven-core/src/main/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformation.java b/maven-core/src/main/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformation.java
index 1fbfb51..fc0a8bf 100644
--- a/maven-core/src/main/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformation.java
+++ b/maven-core/src/main/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformation.java
@@ -22,7 +22,6 @@ package org.apache.maven.rtinfo.internal;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.Validate;
 import org.apache.maven.rtinfo.RuntimeInformation;
-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;
@@ -34,6 +33,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
 
+import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
@@ -47,60 +47,69 @@ public class DefaultRuntimeInformation
 {
     private final Logger logger = LoggerFactory.getLogger( getClass() );
 
-    private String mavenVersion;
+    private final VersionScheme versionScheme;
 
+    private final String mavenVersion;
+
+    @Inject
+    public DefaultRuntimeInformation( final VersionScheme versionScheme )
+    {
+        this.versionScheme = versionScheme;
+        this.mavenVersion = loadMavenVersion();
+    }
+
+    @Override
     public String getMavenVersion()
     {
-        if ( mavenVersion == null )
-        {
-            Properties props = new Properties();
+        return mavenVersion;
+    }
+
+    private String loadMavenVersion()
+    {
+        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 );
             }
         }
 
-        return mavenVersion;
+        String version = props.getProperty( "version", "" ).trim();
+
+        if ( !version.startsWith( "${" ) )
+        {
+            return version;
+        }
+        else
+        {
+            return "";
+        }
     }
 
+    @Override
     public boolean isMavenVersion( String versionRange )
     {
-        VersionScheme versionScheme = new GenericVersionScheme();
-
         Validate.notBlank( versionRange, "versionRange can neither be null, empty nor blank" );
 
         VersionConstraint constraint;
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
index 379d05c..dfc7181 100644
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
@@ -40,7 +40,6 @@ import org.eclipse.aether.resolution.VersionRangeRequest;
 import org.eclipse.aether.resolution.VersionRangeResolutionException;
 import org.eclipse.aether.resolution.VersionRangeResult;
 import org.eclipse.aether.spi.synccontext.SyncContextFactory;
-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;
@@ -73,23 +72,25 @@ public class DefaultVersionRangeResolver
     private final MetadataResolver metadataResolver;
     private final SyncContextFactory syncContextFactory;
     private final RepositoryEventDispatcher repositoryEventDispatcher;
+    private final VersionScheme versionScheme;
 
     @Inject
-    public DefaultVersionRangeResolver( MetadataResolver metadataResolver, SyncContextFactory syncContextFactory,
-                                        RepositoryEventDispatcher repositoryEventDispatcher )
+    public DefaultVersionRangeResolver( MetadataResolver metadataResolver,
+                                        SyncContextFactory syncContextFactory,
+                                        RepositoryEventDispatcher repositoryEventDispatcher,
+                                        VersionScheme versionScheme )
     {
         this.metadataResolver = Objects.requireNonNull( metadataResolver, "metadataResolver cannot be null" );
         this.syncContextFactory = Objects.requireNonNull( syncContextFactory, "syncContextFactory cannot be null" );
         this.repositoryEventDispatcher = Objects.requireNonNull( repositoryEventDispatcher,
                 "repositoryEventDispatcher cannot be null" );
+        this.versionScheme = Objects.requireNonNull( versionScheme, "versionScheme cannot be null" );
     }
     public VersionRangeResult resolveVersionRange( RepositorySystemSession session, VersionRangeRequest request )
         throws VersionRangeResolutionException
     {
         VersionRangeResult result = new VersionRangeResult( request );
 
-        VersionScheme versionScheme = new GenericVersionScheme();
-
         VersionConstraint versionConstraint;
         try
         {
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionSchemeProvider.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionSchemeProvider.java
new file mode 100644
index 0000000..6c7f5ef
--- /dev/null
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionSchemeProvider.java
@@ -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;
+
+/**
+ * Default version scheme provider: provides singleton {@link GenericVersionScheme} instance.
+ */
+@Singleton
+@Named
+public final class DefaultVersionSchemeProvider
+        implements Provider<VersionScheme>
+{
+    private final GenericVersionScheme genericVersionScheme;
+
+    public DefaultVersionSchemeProvider()
+    {
+        this.genericVersionScheme = new GenericVersionScheme();
+    }
+
+    @Override
+    public VersionScheme get()
+    {
+        return genericVersionScheme;
+    }
+}
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java
index 1e49bfc..9491b12 100644
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java
@@ -34,6 +34,7 @@ import org.eclipse.aether.impl.MetadataGeneratorFactory;
 import org.eclipse.aether.impl.VersionRangeResolver;
 import org.eclipse.aether.impl.VersionResolver;
 import org.eclipse.aether.impl.guice.AetherModule;
+import org.eclipse.aether.version.VersionScheme;
 
 /**
  * MavenResolverModule
@@ -46,6 +47,7 @@ public final class MavenResolverModule
     protected void configure()
     {
         install( new AetherModule() );
+        bind( VersionScheme.class ).toProvider( new DefaultVersionSchemeProvider() );
         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 );