如何链接/缝合Maven插件?

时间:2018-10-09 17:59:22

标签: maven maven-plugin mojo

我想链接两个应该按顺序执行的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>部分中以正确的顺序进行定义。我想这已经涵盖了。

2 个答案:

答案 0 :(得分: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>);

通过文件共享

第一个插件可以在“目标”文件夹中生成一些输出文件 第二个插件可以读取该文件

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

您可以找到Here有关此方法的更多信息

答案 1 :(得分:-1)

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