我创建了一个 Plexus 组件来容纳我想要创建的几个 Mojo 的通用逻辑。我已经能够传递localRepository
来自 Mojo(和测试用例)的信息和项目。
我想知道是否有一种方法可以从组件中获取MavenSession
or MavenExecutionRequest
,而不必将它们作为参数从 Mojo 传递。我知道我的组件将从 Maven Mojo 运行。
在这种情况下,我使用的是 Maven 2。
我创建了一个 Plexus 组件来容纳我想要创建的几个 Mojo 的通用逻辑。我已经能够传递localRepository
来自 Mojo(和测试用例)的信息和项目。
我想知道是否有一种方法可以从组件中获取MavenSession
or MavenExecutionRequest
,而不必将它们作为参数从 Mojo 传递。我知道我的组件将从 Maven Mojo 运行。
在这种情况下,我使用的是 Maven 2。
我不相信有,我也不认为这是一个好主意。
据我了解,您的目标是拥有一个类似公共的组件,该组件将用于多个 mojo。这需要传入当前的 Maven 会话并用于随后传回一个值。
然而,Maven 的工作方式是它在几乎类似于容器的环境中从插件运行目标。每个插件都被允许在特定的Maven Phase中运行,如<executions />
. 这允许 Maven 分离构建、测试、检查、部署等的复杂性。调用mvn clean install
,除非我弄错了,是两个单独的执行,一个运行clean
构建生命周期,然后是install
.
因此,假设 theMavenSession
和后续MavenExecutionRequest
表示先前调用中使用的同一实例是不安全的。 clean
是一个单独的调用,其逻辑不应在新会话中维护。
所以,我实质上要说的是,虽然拥有一个通用的 plexus 组件是一种很好的做法,特别是为了保持你的 mojo 的一致性,但每次都提供适当的会话是正确的做法(几乎是ioc )。
我希望这就是您正在寻找的答案。相当长,但要了解为什么需要提供会话,请思考Maven
.