嵌入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、付费专栏及课程。

余额充值