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

时间:2015-02-17 15:34:13

标签: maven maven-2 maven-3 maven-plugin maven-release-plugin

之前有一个答案,但我不认为accepted answer is correct

我创建了一个Maven插件,以编程方式提供了&#39; fiddles&#39;基于版本的某些方面的<repositories><distributionManagement>配置(如果版本具有附加的分支名称,即1.0.0-RC1)。这允许在功能分支构建中使用单独的Nexus存储库,而不需要在合并回int之前进行POM修改。

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

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

相关的答案表明&#39;清洁&#39;在解决之前运行,但它似乎不是真的。如果我将目标配置为默认阶段&#39; clean&#39;或者&#39;验证&#39;,解决方案似乎仍然首先发生。

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

编辑:似乎无法做到这一点。我认为这需要在Maven中修复。在依赖解析之前,应该有地方运行需要&#39; project&#39;的插件,而不必在Plexus中进行钻研。这将允许动态配置在后续解析期间使用的存储库列表。据推测,这需要在EventDispatcher实现中的某处进行更改(我注意到它已被弃用?)。

1 个答案:

答案 0 :(得分:1)

我建议您查看EventSpy in Mavenartifact resolution此类事件的RepositoryEvent.EventType但是这不会作为插件工作。

onEvent&#39;的实现可能看起来像这样:

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

其中