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

时间:2010-09-17 15:11:28

标签: maven maven-2 components mojo plexus

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

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

我在这个例子中使用Maven。

1 个答案:

答案 0 :(得分:1)

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

根据我的理解,你的目标是拥有一个类似公共部件,将用于几个mojos。这需要将当前的Maven会话传递给&以后用来传回一个值。

Maven的工作方式是,它在类似容器的环境中从插件运行目标。允许每个插件在<executions />定义的特定Maven Phase内执行操作。这允许Maven分离构建,测试,检查,部署等的复杂性。调用mvn clean install,除非我错了,是两个单独的执行,一个运行clean {{3} },然后是install

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

所以,我基本上说的是,虽然有一个共同的丛组件是一个很好的做法,特别是为了保持你的mojos的一致性,正确的做法(差不多build lifecycle),提供适当的会议每次。

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