【问题标题】:How to get the current MavenSession or MavenExecutionRequest from a Plexus Component如何从 Plexus 组件中获取当前的 MavenSession 或 MavenExecutionRequest
【发布时间】:2011-04-13 18:55:45
【问题描述】:

我创建了一个 Plexus 组件来容纳我想要创建的几个 Mojo 的通用逻辑。我已经能够从 Mojo(和测试用例)传递 localRepository 和项目等信息。

我想知道是否有一种方法可以从组件中获取MavenSessionMavenExecutionRequest,而无需将它们作为参数从Mojo 传递。我知道我的组件将从 Maven Mojo 运行。

在本例中我使用的是 Maven 2。

【问题讨论】:

  • 我知道这个问题已经很老了。 Thomas,您是想在多个阶段“重用”相同的会话,还是只需要对该阶段的当前 MavenSession 的引用?
  • 嗯..如果有的话,我想它不再是线程安全的了。

标签: maven maven-2 components mojo plexus


【解决方案1】:

我不相信有,我也不认为这是个好主意。

据我了解,您的目标是拥有一个类似公共的组件,该组件将用于多个 mojo。这需要传入当前的 Maven 会话并用于随后传回一个值。

然而,Maven 的工作方式是它在几乎类似于容器的环境中运行插件的目标。每个插件都可以在特定的Maven Phase 中运行,由<executions /> 定义。这允许 Maven 分离构建、测试、检查、部署等的复杂性。调用 mvn clean install,除非我弄错了,是两个单独的执行,一个运行 clean build lifecycle,然后是 @ 987654327@.

因此,假设MavenSession 和后续的MavenExecutionRequest 代表先前调用中使用的同一实例是不安全的。 clean 是一个单独的调用,其逻辑不应在新会话中维护。

所以,我实质上要说的是,虽然拥有一个通用的 plexus 组件是一种很好的做法,尤其是为了保持你的 mojo 之间的一致性,但正确的做法是(几乎是ioc),为每个组件提供适当的会话时间。

我希望这就是您正在寻找的答案。相当长,但要了解为什么需要提供会话,请考虑 Maven

【讨论】:

    猜你喜欢
    • 2019-02-28
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 2022-08-20
    • 2014-01-18
    • 2017-12-27
    相关资源
    最近更新 更多