我正在尝试在我正在创建的自定义 Maven 插件中使用 Spring DI。
但是,当使用该插件时,我收到以下错误:
Unable to load the mojo 'cva2sch' (or one of its required components) from the plugin 'dge:preparation-maven-plugin:0.1.0-SNAPSHOT': com.google.inject.ProvisionException: Guice provision errors:
[ERROR]
[ERROR] 1) null returned by binding at org.eclipse.sisu.wire.LocatorWiring
虽然我有一个@Configuration(带有@ComponentScan)类和@Mojo类上的@Component,但我猜maven插件不使用Spring。 是否根本不可能在 @Mojo 中使用 Spring DI,或者是否需要一些特殊设置才能做到这一点?
我知道这是一个老问题,但由于尚未得到解答,我会回复。
Maven和插件使用基于Google Guice的DI框架,称为Sisu。 要在 spring 和 Sisu 之间建立链接,有多种方法:
您可以创建 Spring 上下文和 beans,然后使用 JSR330 注释将它们自己注入到 Sisu 中(sisu 的一个很酷的事情是,它使用标准的 Jakarta 注释),
或者您使用以下插件/库之一来为您完成这项工作: Spring-Bridge-Maven-Plugin 在编译插件时完成所有这些工作。 Spring-Bridge-Maven-Library 在运行时执行此操作,但需要 Maven 扩展(您可以在 github 上查看文档)