我创建了一个Plexus组件来容纳我想要创建的几个Mojos的通用逻辑。我能够从Mojo(和测试用例)传递localRepository
和项目等信息。
我想知道是否有办法从组件中获取MavenSession
或MavenExecutionRequest
,而不必将它们作为Mojo中的参数传递。我知道我的组件将从Maven Mojo运行。
我在这个例子中使用Maven。
答案 0 :(得分:1)
我不相信有,也不认为这是个好主意。
根据我的理解,你的目标是拥有一个类似公共部件,将用于几个mojos。这需要将当前的Maven会话传递给&以后用来传回一个值。
Maven的工作方式是,它在类似容器的环境中从插件运行目标。允许每个插件在<executions />
定义的特定Maven Phase内执行操作。这允许Maven分离构建,测试,检查,部署等的复杂性。调用mvn clean install
,除非我错了,是两个单独的执行,一个运行clean
{{3} },然后是install
。
因此,假设MavenSession
和后续MavenExecutionRequest
代表前一次调用中使用的相同实例是不安全的。 clean
是一个单独的调用,其逻辑不应在新会话中维护。
所以,我基本上说的是,虽然有一个共同的丛组件是一个很好的做法,特别是为了保持你的mojos的一致性,正确的做法(差不多build lifecycle),提供适当的会议每次。
我希望这是你正在寻找的答案。相当长,但要理解为什么需要提供会话,请考虑Maven
。