如何在依赖解析之前运行 Maven 插件
Posted
技术标签:
【中文标题】如何在依赖解析之前运行 Maven 插件【英文标题】:How to get a Maven plugin to run before Dependency Resolution 【发布时间】:2022-02-03 04:56:33 【问题描述】:对此有一个先前的答案,但我不认为accepted answer is correct
我创建了一个 Maven 插件,它基于版本的某些方面以编程方式“摆弄”<repositories>
和 <distributionManagement>
配置(因此,如果版本附加了分支名称,即 1.0.0-RC1)。这允许在功能分支构建中使用单独的 Nexus 存储库,而无需在合并回 int 之前修改 POM。
我不能只更改分支构建的 groupId,因为这是一个 OSGi 项目,并且 groupId 必须与源包完美匹配。
问题在于,在依赖解析之前似乎没有运行 maven 生命周期的任何部分。因此,为解析提供正确的<repository>
的目标永远不会被配置,所以 Maven 只是抱怨它无法解析。
链接的答案表明“干净”在解决之前运行,但这似乎不是真的。如果我将我的目标配置为具有“清理”或“验证”的默认阶段,则似乎仍会首先解决。
我可以让我的插件目标在依赖解析之前运行吗?
编辑:这似乎无法做到。我认为这需要在 Maven 中修复。在依赖解析之前,应该有地方运行需要“项目”的插件,而不必在 Plexus 中钻研。这将允许在后续解析期间使用的存储库列表的动态配置。大概这需要在 EventDispatcher 实现中的某个地方进行更改(我注意到它已被弃用?)。
【问题讨论】:
您是否尝试在 pre-clean 阶段执行您的插件? 接下来我会尝试.. 现在发生了一些奇怪的事情,插件似乎不再运行了。当我让它再次运行时,我会告诉你会发生什么。 @heRoy No. pre-clean 仍然在依赖解析之后。这令人沮丧。 Maven 允许您以编程方式更改插件中的存储库列表,但不提供任何有意义的阶段! 你能解决这个问题吗?我发现自己需要在工件解析之前执行一个插件,因为该插件实际上会在本地安装一些工件,并且由于工件丢失错误而没有机会这样做! @Asu 没有。我甚至在 Maven 的积压工作中提出了一个请求,但它被挡住了。我可以自己修补它,这是一个单行修复。这令人沮丧。 maven 开发人员似乎有点小圈子。这是很久以前的事了。也许你应该尝试解决这个问题,也许你现在会有更多的运气?祝你好运。 【参考方案1】:我建议查看EventSpy in Maven,其中有artifact resolution 或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 );
在哪里
【讨论】:
如何实现 AbstractEventSpy 使其成为我构建的一部分? 您必须创建一个 jar 文件,该文件将位于 '$MAVEN_HOME/lib/ext' 文件夹中。以上是关于如何在依赖解析之前运行 Maven 插件的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用任何插件的情况下将非 maven 依赖项安装到您的 maven 项目中? [复制]