You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2022/02/19 21:02:26 UTC

[maven] branch maven-3.8.x updated: [MNG-7395] Support interpolation in extensions.xml

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

michaelo pushed a commit to branch maven-3.8.x
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/maven-3.8.x by this push:
     new a5acd3e  [MNG-7395] Support interpolation in extensions.xml
a5acd3e is described below

commit a5acd3ec6095ea2ff50191576c33685c1d038c1f
Author: Christoph Läubrich <ch...@laeubi-soft.de>
AuthorDate: Mon Jan 24 14:02:13 2022 +0100

    [MNG-7395] Support interpolation in extensions.xml
    
    This adds support for property interpolation in extensions.xml to allow
    advanced use cases where one wants to contribute certain things via the
    commandline.
    
    This closes #673
---
 .../internal/BootstrapCoreExtensionManager.java    | 41 ++++++++++++++++------
 1 file changed, 31 insertions(+), 10 deletions(-)

diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java
index a473269..4f9faae 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java
@@ -40,6 +40,10 @@ import org.codehaus.plexus.DefaultPlexusContainer;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.classworlds.ClassWorld;
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.interpolation.InterpolationException;
+import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.MapBasedValueSource;
+import org.codehaus.plexus.interpolation.StringSearchInterpolator;
 import org.codehaus.plexus.logging.Logger;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.artifact.Artifact;
@@ -83,14 +87,16 @@ public class BootstrapCoreExtensionManager
     {
         RepositorySystemSession repoSession = repositorySystemSessionFactory.newRepositorySession( request );
         List<RemoteRepository> repositories = RepositoryUtils.toRepos( request.getPluginArtifactRepositories() );
+        Interpolator interpolator = createInterpolator( request );
 
-        return resolveCoreExtensions( repoSession, repositories, providedArtifacts, extensions );
+        return resolveCoreExtensions( repoSession, repositories, providedArtifacts, extensions, interpolator );
     }
 
     private List<CoreExtensionEntry> resolveCoreExtensions( RepositorySystemSession repoSession,
                                                             List<RemoteRepository> repositories,
                                                             Set<String> providedArtifacts,
-                                                            List<CoreExtension> configuration )
+                                                            List<CoreExtension> configuration,
+                                                            Interpolator interpolator )
         throws Exception
     {
         List<CoreExtensionEntry> extensions = new ArrayList<>();
@@ -99,7 +105,8 @@ public class BootstrapCoreExtensionManager
 
         for ( CoreExtension extension : configuration )
         {
-            List<Artifact> artifacts = resolveExtension( extension, repoSession, repositories, dependencyFilter );
+            List<Artifact> artifacts = resolveExtension( extension, repoSession, repositories,
+                                                         dependencyFilter, interpolator );
             if ( !artifacts.isEmpty() )
             {
                 extensions.add( createExtension( extension, artifacts ) );
@@ -127,18 +134,20 @@ public class BootstrapCoreExtensionManager
     }
 
     private List<Artifact> resolveExtension( CoreExtension extension, RepositorySystemSession repoSession,
-                                             List<RemoteRepository> repositories, DependencyFilter dependencyFilter )
+                                             List<RemoteRepository> repositories, DependencyFilter dependencyFilter,
+                                             Interpolator interpolator )
         throws ExtensionResolutionException
     {
         try
         {
-            // TODO: enhance the PluginDependenciesResolver to provide a
-            // TODO:    resolveCoreExtension method which uses a CoreExtension
-            // TODO:    object instead of a Plugin as this makes no sense
+            /* TODO: Enhance the PluginDependenciesResolver to provide a
+             * resolveCoreExtension method which uses a CoreExtension
+             * object instead of a Plugin as this makes no sense.
+             */
             Plugin plugin = new Plugin();
-            plugin.setGroupId( extension.getGroupId() );
-            plugin.setArtifactId( extension.getArtifactId() );
-            plugin.setVersion( extension.getVersion() );
+            plugin.setGroupId( interpolator.interpolate( extension.getGroupId() ) );
+            plugin.setArtifactId( interpolator.interpolate( extension.getArtifactId() ) );
+            plugin.setVersion( interpolator.interpolate( extension.getVersion() ) );
 
             DependencyNode root = pluginDependenciesResolver
                     .resolveCoreExtension( plugin, dependencyFilter, repositories, repoSession );
@@ -152,6 +161,18 @@ public class BootstrapCoreExtensionManager
         {
             throw new ExtensionResolutionException( extension, e.getCause() );
         }
+        catch ( InterpolationException e )
+        {
+            throw new ExtensionResolutionException( extension, e );
+        }
+    }
+
+    private static Interpolator createInterpolator( MavenExecutionRequest request )
+    {
+        StringSearchInterpolator interpolator = new StringSearchInterpolator();
+        interpolator.addValueSource( new MapBasedValueSource( request.getUserProperties() ) );
+        interpolator.addValueSource( new MapBasedValueSource( request.getSystemProperties() ) );
+        return interpolator;
     }
 
 }