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;
}
}