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/03 13:08:01 UTC
[maven] 01/01: [MNG-7103] VersionScheme provider
This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch mng-7103-versionScheme-provider
in repository https://gitbox.apache.org/repos/asf/maven.git
commit 770c0b33bd9574c7c899ba1b7045224d517d48df
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Sun Oct 3 15:06:26 2021 +0200
[MNG-7103] VersionScheme provider
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 | 3 +
5 files changed, 107 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..ec1c4da 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,8 @@ 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.util.version.GenericVersionScheme;
+import org.eclipse.aether.version.VersionScheme;
/**
* MavenResolverModule
@@ -46,6 +48,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 );