58

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

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

在这种情况下,我使用的是 Maven 2。

4

1 回答 1

1

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

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

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

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

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

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

于 2012-08-12T23:30:35.817 回答