Skip to content

Commit

Permalink
[MNG-7395] Support interpolation in extensions.xml
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Christoph Läubrich authored and michael-o committed Feb 19, 2022
1 parent 2bb1228 commit a5acd3e
Showing 1 changed file with 31 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@
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;
Expand Down Expand Up @@ -83,14 +87,16 @@ public List<CoreExtensionEntry> loadCoreExtensions( MavenExecutionRequest reques
{
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<>();
Expand All @@ -99,7 +105,8 @@ private List<CoreExtensionEntry> resolveCoreExtensions( RepositorySystemSession

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 ) );
Expand Down Expand Up @@ -127,18 +134,20 @@ private CoreExtensionEntry createExtension( CoreExtension extension, List<Artifa
}

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 );
Expand All @@ -152,6 +161,18 @@ private List<Artifact> resolveExtension( CoreExtension extension, RepositorySyst
{
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;
}

}

0 comments on commit a5acd3e

Please sign in to comment.