【问题标题】:Share data between Mojo through Maven plugin execution通过 Maven 插件执行在 Mojo 之间共享数据
【发布时间】:2014-02-02 14:56:34
【问题描述】:

我正在开发一个 Maven 插件,由 3 个继承 AbstractMojo 的 mojos 组成。

长话短说,这 3 种魔力用于:

  1. 编译一些 groovy 脚本
  2. 使用从编译中提取的数据生成 SQL 脚本
  3. 将这些脚本加载到数据库中

之前我的第二个mojo继承了第一个,第三个继承了第二个,它们都在execute()方法中调用了super.execute(),这样它们就可以级联了。

我正在重写插件以使其更清洁和更好地设计,因此我删除了继承并希望依赖 Maven 原生生命周期,将 3 个 mojos 绑定到 compilepackagedeploy 阶段。

我面临的问题是我无法找到一种干净的方法来将我在第一个 mojo 执行期间提取的数据传递给第二个 mojo(例如文件扩展名,如果文件被正确编译,包路径等)。 Maven 插件 API 中是否有任何可用的临时存储或缓存系统?

【问题讨论】:

  • 如果我正确理解你的第一个 mojo 会编译 groovy 脚本并生成一些编译的类(文件系统中某处的 *.class 文件)。这些类可用于从中提取 SQL 信息,第三类可将脚本加载到数据库中。将 mojo 绑定到适当的生命周期阶段,您就可以将信息从一个 mojo 传输到另一个 mojo。除此之外,已经存在用于编译 groovy 代码和将 sql 脚本加载到数据库中的插件。也许这个项目可以作为 Github 项目或类似项目使用。
  • 您可以将文件写入 ${project.build.directory} 吗?在插件之间引入了一些隐式耦合,但如果输入文件名是可配置的,那应该没问题。然后还有plugin context,但这很可能不适合编译文件等。
  • 我编辑了我的问题,添加了一些关于我想要传输什么样的数据的细节。它依赖于我们自己的编译引擎,所以我们不想使用其他插件。这个想法是从编译结果中获取一些信息(不是从编译结果文件中,而是从编译过程中捕获的一些上下文信息(错误、包路径等)中获取。

标签: java maven maven-plugin


【解决方案1】:

由于没有直接的方式在 Maven mojo 之间共享数据,我选择将需要传递给下一个 Mojo 的数据写入 CSV 文件(XML、YAML 或任何其他格式也可以完成这项工作)。

与通过执行使用存储在内存中的某些缓存或上下文相比的优势在于,您可以执行一个目标,将其结果保存在文件系统中,然后随时执行以下目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多