从自定义插件添加依赖项

Add dependency from custom plugin

我正在开发自定义 Maven 插件。我想让我的插件为项目添加新的依赖项。

我有以下代码:

@Mojo(name = "generate-model", defaultPhase = LifecyclePhase.GENERATE_SOURCES)
public class ModelGeneratorMojo extends AbstractMojo {
    @Parameter(defaultValue = "${project}", required = true, readonly = true)
    MavenProject project;

    @Override
    public void execute() throws MojoExecutionException {
        Dependency connectivity = new Dependency();
        connectivity.setGroupId("groupid");
        connectivity.setArtifactId("artifactid");
        connectivity.setVersion("1.0");
        //noinspection unchecked
        project.getDependencies().add(connectivity);
    }
}

好像没有效果,因为我在编译包含这个插件的项目时,出现未解析的符号错误。

我确定插件已执行,因为我在 target 文件夹中看到它生成的代码(我的示例中省略了代码生成)。

我认为您应该将插件中的 goal 绑定到 Maven 构建过程的 Initialize 阶段,以便在构建过程的早期包含依赖项。

大致如下:

@Mojo(name = "generate-model", defaultPhase = LifecyclePhase.INITIALIZE)
public class ModelGeneratorMojo extends AbstractMojo {
    @Parameter(defaultValue = "${project}", required = true, readonly = true)
    MavenProject project;

    @Parameter(defaultValue = "${session}", required = true)
    MavenSession session;


    @Override
    public void execute() throws MojoExecutionException {
        Dependency connectivity = new Dependency();
        connectivity.setGroupId("groupid");
        connectivity.setArtifactId("artifactid");
        connectivity.setVersion("1.0");

        project.getDependencies().add(connectivity);
        session.setCurrentProject(project);

    }
}
<plugin>
    <groupId>com.maventest</groupId>
    <artifactId>maven-generate-model</artifactId>
    <version>1.0-SNAPSHOT</version>
    <executions>
        <execution>
            <goals>
                <goal>generate-model</goal>
            </goals>
        </execution>
    </executions>
</plugin>

我尝试了多种途径来实现这一点,但似乎无法使用 maven 插件,也许 maven 扩展是更好的选择。

原因是依赖解析是进入 Maven 生命周期的第一步,您需要额外的依赖来编译应用程序。 使用 Maven 扩展,您可以延长 Maven 生命周期。 https://maven.apache.org/examples/maven-3-lifecycle-extensions.html