【发布时间】:2014-02-02 14:56:34
【问题描述】:
我正在开发一个 Maven 插件,由 3 个继承 AbstractMojo 的 mojos 组成。
长话短说,这 3 种魔力用于:
- 编译一些 groovy 脚本
- 使用从编译中提取的数据生成 SQL 脚本
- 将这些脚本加载到数据库中
之前我的第二个mojo继承了第一个,第三个继承了第二个,它们都在execute()方法中调用了super.execute(),这样它们就可以级联了。
我正在重写插件以使其更清洁和更好地设计,因此我删除了继承并希望依赖 Maven 原生生命周期,将 3 个 mojos 绑定到 compile、package 和 deploy 阶段。
我面临的问题是我无法找到一种干净的方法来将我在第一个 mojo 执行期间提取的数据传递给第二个 mojo(例如文件扩展名,如果文件被正确编译,包路径等)。 Maven 插件 API 中是否有任何可用的临时存储或缓存系统?
【问题讨论】:
-
如果我正确理解你的第一个 mojo 会编译 groovy 脚本并生成一些编译的类(文件系统中某处的 *.class 文件)。这些类可用于从中提取 SQL 信息,第三类可将脚本加载到数据库中。将 mojo 绑定到适当的生命周期阶段,您就可以将信息从一个 mojo 传输到另一个 mojo。除此之外,已经存在用于编译 groovy 代码和将 sql 脚本加载到数据库中的插件。也许这个项目可以作为 Github 项目或类似项目使用。
-
您可以将文件写入 ${project.build.directory} 吗?在插件之间引入了一些隐式耦合,但如果输入文件名是可配置的,那应该没问题。然后还有plugin context,但这很可能不适合编译文件等。
-
我编辑了我的问题,添加了一些关于我想要传输什么样的数据的细节。它依赖于我们自己的编译引擎,所以我们不想使用其他插件。这个想法是从编译结果中获取一些信息(不是从编译结果文件中,而是从编译过程中捕获的一些上下文信息(错误、包路径等)中获取。
标签: java maven maven-plugin