从自定义插件添加依赖项
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
我正在开发自定义 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