如何在依赖解析之前运行 Maven 插件

Ric*_*ard 7 maven-2 maven-plugin maven-3 maven maven-release-plugin

对此有一个先前的答案,但我认为接受的答案不正确

我创建了一个 Maven 插件,它根据版本的某些方面以编程方式“摆弄”<repositories><distributionManagement>配置(因此,如果版本附加了分支名称,即 1.0.0-RC1)。这允许在功能分支构建中使用单独的 Nexus 存储库,而无需在合并回 int 之前修改 POM。

我不能只更改分支构建上的 groupId,因为这是一个 OSGi 项目,并且 groupId 必须理想地匹配源包。

问题是在依赖解析之前运行的 Maven 生命周期中似乎没有任何部分。因此,<repository>永远不会配置提供正确分辨率的目标,因此 Maven 只是抱怨它无法解决。

链接的答案表明“干净”在解决之前运行,但似乎并非如此。如果我将目标配置为具有“清理”或“验证”的默认阶段,则解决方案似乎仍会首先发生。

我可以让我的插件目标在依赖解析之前运行吗?

编辑:这似乎无法完成。我认为这需要在 Maven 中修复。在依赖解析之前,应该有地方运行需要“项目”的插件,而不必深入研究 Plexus。这将允许在后续解析期间使用的存储库列表的动态配置。大概这需要在 EventDispatcher 实现中的某处进行更改(我注意到已弃用?)。

khm*_*ise 1

我建议看一下Maven 中的 EventSpy,它具有用于工件解析RepositoryEvent.EventType的此类事件,但这不能作为插件使用。

“onEvent”的实现可能如下所示:

@Override
public void onEvent( Object event )
    throws Exception
{
    try
    {
        if ( event instanceof ExecutionEvent )
        {
            executionEventHandler( (ExecutionEvent) event );
        }
        else if ( event instanceof RepositoryEvent )
        {
            repositoryEventHandler( (RepositoryEvent) event );
        }
        else if ( event instanceof MavenExecutionRequest )
        {
            executionRequestEventHandler( (MavenExecutionRequest) event );
        }
        else if ( event instanceof MavenExecutionResult )
        {
            executionResultEventHandler( (MavenExecutionResult) event );
        }
        else if ( event instanceof DependencyResolutionRequest )
        {
            dependencyResolutionRequest( (DependencyResolutionRequest) event );
        }
        else if ( event instanceof DependencyResolutionResult )
        {
            dependencyResolutionResult( (DependencyResolutionResult) event );
        }
    }
    catch ( Exception e )
    {
        logger.error( "Exception", e );
    }
}
Run Code Online (Sandbox Code Playgroud)

哪里的