嵌入Maven

这是一个非常罕见的用例,但有时您需要它。 如何将Maven嵌入到您的应用程序中,以便您可以以编程方式运行目标?

简短的答案是:这很棘手。 我涉足了我的java webapp自动同步项目的问题,有时我决定不嵌入它。 最终,我使用了可以满足我需要的库,但是无论如何,以下是可能有用的步骤和工具。

通常,嵌入式Maven需要的是在Maven项目中执行一些目标。 有两种情况。

第一个是,如果您正在Maven容器中运行,即您正在编写Mojo /插件。 然后这很容易,因为您可以将所有事务都由已初始化的plexus容器进行管理。 在这种情况下,您可以使用mojo-executor 。 易于使用,但是需要一个“项目”,“ pluginManager”和“会话”,您无法轻易获得它们。

第二种情况是完全嵌入的Maven。 有一个图书馆可以满足我的需要(感谢MariuszS指出了这一点)–它是Maven Embedder此SO问题中描述了它的用法。 同时使用第一个和第二个答案。

在找到该库之前,我尝试了另外两个库: jenkins maven EmbeddedMaven Invoker 。 这两个库中的问题是:它们需要一个maven家。 即,maven安装所在的路径。 这有点与“嵌入式”专家的想法相反。 如果Maven Embedder适合您,则可以停止阅读。 但是,在某些情况下,Maven Embedder可能不是您想要的。 在这种情况下,您应该使用上述两个库之一。 那么,如何找到并设置行家呢?

  • 要求用户指定它。 可能不太麻烦
  • 使用M2_HOME。 其中一个库默认情况下使用该库,但问题是可能未设置它。 例如,我通常不设置它。 如果不是这样,则可以退回到以前的方法
  • 扫描整个文件系统以进行Maven安装-听起来不错,只能执行一次,然后存储在某个条目中。 问题是–可能没有maven安装。 即使是开发人员的机器,IDE(至少是Eclipse)都具有“嵌入式”专家。 尽管它可能以与手动安装相同的格式将其存储在内部某个位置,但它可能会根据版本而更改其路径或结构。 当然,您可以不时地重新扫描文件树以找到这样的安装
  • 自己以编程方式下载Maven。 然后,您可以确定它的位置,并且始终将其以相同的格式放置在此处。 这里的问题是版本不匹配–用户可能正在使用其他版本的maven。 使版本可配置是一种选择。

所有这些在某些情况下均有效,而在另一些情况下则无效。

因此,按优先顺序:

  1. 确保您确实需要嵌入行家
  2. 使用Maven嵌入器
  3. 使用其他选项及其含义。

翻译自: https://www.javacodegeeks.com/2013/11/embedding-maven.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值