您如何 chain/stitch Maven 插件?
How can you chain/stitch Maven plugins?
我想链接两个应该按顺序执行的 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>
部分以正确的顺序定义。所以我想这已经涵盖了。
我相信在 Maven 中订购东西的唯一方法是通过 lifecycles。您可以在 generate-sources
阶段获得第一个插件(用于输入信息)运行,在 process-sources
阶段获得第二个插件。
据我所知,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'文件夹中生成一些输出文件
而第二个插件可以读取这个文件
编写一个 "wrapping" 插件来执行其他插件(比如第一个和第二个插件)。毕竟 mojos 只是 java 可以从聚合器插件
调用的代码
您可以找到 Here 有关此方法的更多信息
我想链接两个应该按顺序执行的 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>
部分以正确的顺序定义。所以我想这已经涵盖了。
我相信在 Maven 中订购东西的唯一方法是通过 lifecycles。您可以在 generate-sources
阶段获得第一个插件(用于输入信息)运行,在 process-sources
阶段获得第二个插件。
据我所知,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'文件夹中生成一些输出文件 而第二个插件可以读取这个文件
编写一个 "wrapping" 插件来执行其他插件(比如第一个和第二个插件)。毕竟 mojos 只是 java 可以从聚合器插件
调用的代码您可以找到 Here 有关此方法的更多信息