如何从Plexus组件获取当前的MavenSession或MavenExecutionRequest

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

我想知道是否有办法从组件内部获取MavenSessionMavenExecutionRequest ,而不必将它们作为参数从一个Mojo传递。 我知道我的组件将从Maven Mojo运行。

我在这个例子中使用Maven 2。

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

根据我的理解,你打算实现的目标是有一个公共的组成部分,将用于几个mojos。 这要求当前的Maven会话被传入并用于随后传回一个值。

然而Maven的工作方式是,它在几乎类似容器的环境中从插件运行目标。 每个插件都可以在特定的Maven阶段内<executions /> ,正如<executions />所定义的。 这允许Maven分离构build,testing,检查,部署等等的复杂性。调用mvn clean install (除非我是错误的)是两个单独的执行,一个运行clean 生命周期 ,然后是install

因此,假定MavenSession和后续的MavenExecutionRequest表示前一个调用中使用的相同实例是MavenExecutionRequest的。 clean是一个单独的调用,其逻辑不应该保留在新的会话中。

所以,我基本上说的是,虽然有一个共同的丛组件是一个很好的做法,尤其是为了保持你的mojos的一致性,每次提供适当的会话是正确的做法(几乎是ioc )。

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

Interesting Posts