你如何链接/缝合 Maven 插件?

Posted

技术标签:

【中文标题】你如何链接/缝合 Maven 插件?【英文标题】:How can you chain/stitch Maven plugins? 【发布时间】:2018-10-09 17:59:21 【问题描述】:

我想链接两个应该按顺序执行的 Maven 插件。第一个插件的输出应该用作第二个插件的输入。让我解释一下:

我想写一个插件来生成资源和来源,比如配置文件、Java 类……我们把这个插件叫做generator-plugin。 这个插件需要输入信息来生成所有这些。可以从文件系统或 SQL 数据库中检索此信息。将来可能会引入其他几个输入源。我的想法是编写两个插件,一个用于从文件系统中获取所有信息,另一个用于从 SQL 数据库中获取信息。

这给出了:

information-plugin-file ---\
                           |--- generator-plugin
information-plugin-sql  ---/

如何使用 Maven 来完成?你可以链接插件吗?我熟悉编写基本的 Mojo,但我不知道如何处理这个问题,因此提出了这个问题。

一种可能性是输出到information-plugin-file/information-plugin-sql 中的标准化文件,并让后续的generator-plugin 插件从同一个文件中读取(Unix 的工作方式,一切都是文件)。

但我正在寻找更直接的、Maven 特定的方法来执行此操作。有这样的办法吗?

关于执行顺序,所有插件都将在generate-sources 阶段运行,并将在<plugins> 部分中以正确的顺序定义。所以我认为这已经涵盖了。

【问题讨论】:

我不会创建两个插件。我会制作一个可能具有不同目标的单个插件来分离源:文件或sql并将其绑定到generate-source/test-sources...... @khmarbaise 你能详细说明一下吗?在我的示例中,我有 3 个插件。你打算如何准确地改变它?谢谢! 你知道插件可以有几个目标(实现功能的类)?这个不同的目标可以做不同的事情..例如maven-war-plugin有三个目标加上帮助目标...看看源代码github.com/apache/maven-war-plugin或官方源gitbox.apache.org/repos/asf?p=maven-war-plugin.git 【参考方案1】:

AFAIK,maven 中的插件被设计成完全独立的,因此可以使用以下共享信息的方法:

通过 maven 属性共享:

可以在第一个插件中设置属性,并且可能可以从第二个插件中访问它

import org.apache.maven.project.MavenProject;
// now inject it into your mojo of the first plugin 
@Parameter(defaultValue = "$project")
private MavenProject project;

// Inside the "execute" method:
project.getProperties().setProperty("mySampleProperty", <SOME_VALUE_GOES_HERE>);

通过文件共享

第一个插件可以在'target'文件夹中生成一些输出文件 第二个插件可以读取这个文件

编写一个执行其他插件(如第一个和第二个插件)的“包装”插件。毕竟mojos只是可以从聚合器插件调用的java代码

你可以找到Here更多关于这个方法的信息

【讨论】:

我同意这就是为什么我在这篇文章的开头声明了 maven 中的插件被设计为完全独立的......【参考方案2】:

我相信在 Maven 中订购商品的唯一方法是通过 lifecycles。你可以让你的第一个插件(用于输入信息)在generate-sources 阶段运行,第二个在process-sources 阶段运行。

【讨论】:

我理解生命周期的概念,但这不是我的问题。我的问题是:第一个插件如何为第二个插件提供输入?第二个插件的输入依赖于第一个插件的输出。 那我误解了你的问题。 关于生命周期,两个插件都将在generate-sources 阶段运行,并以正确的顺序定义。所以我认为已经涵盖了执行顺序。谢谢SiKing! 几乎每个生命周期阶段/插件最终都会在目标目录中生成一些东西。你也应该这样做。 这意味着generator 插件将从target 目录中读取,这可以工作。我想知道是否有一种方法可以直接链接插件,而无需向/从target 写入/读取。

以上是关于你如何链接/缝合 Maven 插件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从插件中读取 .m2/settings.xml 文件中的 Maven 设置

如何使用 imageMagick 缝合裁剪的图像?

eclipse如何在线安装maven3插件

如何拆分文件并并行处理它们然后将它们缝合回去? Unix

如何在 MongoDB 缝合中插入文档并在字段上启用规则

你如何清除 Apache Maven 的缓存?