[MNG-5561] Plugin relocation loses configuration

Previously, to locate plugin configuration in a project the plugin descriptor
was read first and then the GA were extracted. This always worked because the
GA from the model and the GA from plugin descriptor (plugin.xml) were identical.
When a plugin is relocated the target artifact is read, thus its plugin
descriptor as well. Naturally, the GA of new (relocated) does not correspond to
the old (static) one in the model. Therefore, the configuration is not found.
New approach is to use the original plugin GA to locate the configuration in
the model regardless of the relocation.

This closes #642
This commit is contained in:
Michael Osipov 2021-12-25 12:28:47 +01:00
parent d6b9108f58
commit 2670c00751
3 changed files with 9 additions and 6 deletions

View File

@ -44,9 +44,9 @@ public class DefaultMojoExecutionConfigurator
@Override @Override
public void configure( MavenProject project, MojoExecution mojoExecution, boolean allowPluginLevelConfig ) public void configure( MavenProject project, MojoExecution mojoExecution, boolean allowPluginLevelConfig )
{ {
String g = mojoExecution.getGroupId(); String g = mojoExecution.getPlugin().getGroupId();
String a = mojoExecution.getArtifactId(); String a = mojoExecution.getPlugin().getArtifactId();
Plugin plugin = findPlugin( g, a, project.getBuildPlugins() ); Plugin plugin = findPlugin( g, a, project.getBuildPlugins() );

View File

@ -42,7 +42,7 @@ public class BuildPluginManagerStub
public MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, List<RemoteRepository> repositories, public MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, List<RemoteRepository> repositories,
RepositorySystemSession session ) RepositorySystemSession session )
{ {
return MojoExecutorStub.createMojoDescriptor( plugin.getKey() ); return MojoExecutorStub.createMojoDescriptor( plugin );
} }
public ClassRealm getPluginRealm( MavenSession session, PluginDescriptor pluginDescriptor ) public ClassRealm getPluginRealm( MavenSession session, PluginDescriptor pluginDescriptor )

View File

@ -25,6 +25,7 @@ import org.apache.maven.lifecycle.internal.PhaseRecorder;
import org.apache.maven.lifecycle.internal.ProjectIndex; import org.apache.maven.lifecycle.internal.ProjectIndex;
import org.apache.maven.plugin.BuildPluginManager; import org.apache.maven.plugin.BuildPluginManager;
import org.apache.maven.plugin.MavenPluginManager; import org.apache.maven.plugin.MavenPluginManager;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.MojoExecution; import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.descriptor.MojoDescriptor; import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.apache.maven.plugin.descriptor.PluginDescriptor;
@ -67,12 +68,14 @@ public class MojoExecutorStub
} }
public static MojoDescriptor createMojoDescriptor( String mojoDescription ) public static MojoDescriptor createMojoDescriptor( Plugin plugin )
{ {
final PluginDescriptor descriptor = new PluginDescriptor(); final PluginDescriptor descriptor = new PluginDescriptor();
descriptor.setArtifactId( mojoDescription ); descriptor.setGroupId( plugin.getGroupId() );
descriptor.setArtifactId( plugin.getArtifactId() );
descriptor.setPlugin( plugin );
descriptor.setVersion( plugin.getVersion() );
final MojoDescriptor mojoDescriptor = new MojoDescriptor(); final MojoDescriptor mojoDescriptor = new MojoDescriptor();
mojoDescriptor.setDescription( mojoDescription );
mojoDescriptor.setPluginDescriptor( descriptor ); mojoDescriptor.setPluginDescriptor( descriptor );
return mojoDescriptor; return mojoDescriptor;
} }