我想编写一个mojo,其职责是根据一组规则验证POM(除了Maven指定的那些规则)。作为一个例子,它将确保有一个organization
元素,并且它填充了公司的详细信息。
这个插件会将validate
阶段定义为默认阶段,并且它会进入公司的父pom,以便在任何构建时执行。
问题是应该为快照和发布版本应用不同的规则集。
现在,maven release插件在完成操作后(即clean verify
之后)执行release:prepare
。所以,我的插件将在此时执行。凉。
问题是,因为它在发布上下文中,所以我需要应用发布规则集。但我不能说它是在发布环境中;我不知道是谁/什么触发了它 - “常规”构建,或者release:prepare
的“子流程”。没有任何迹象......
一种解决方案可能是填充preparationGoals
,例如clean verify -DisRelease=true
,其中isRelease
是插件查询的参数,以便应用正确的规则集。< / p>
但我不喜欢这个主意;感觉就像一个黑客,太脆弱......
所以问题是:
有没有办法告诉插件执行的上下文是什么,以便我可以从发布中告诉快照?有没有办法将配置绑定到一个目标,而不是一个阶段(如在发布中它不是一个阶段,而是一个release:prepare
目标)?还有其他方法可以达到这个目的吗?
提前致谢,
辖
------------------编辑--------------------
由于一些误解,我给出了一个可能的例子:
假设版本的组织理念是格式:{number}.{number}.P-{number}
,无论出于何种原因。
因此,在“常规”构建中,将检查版本是否采用{number}.{number}.P-{number}-SNAPSHOT
格式,如果发布,则会检查其格式为{number}.{number}.P-{number}
POM从带有-SNAPSHOT
的版本开始,而在CI中,它会通过验证。然后,开发人员想要发布它。因此执行release:prepare
,切断-SNAPSHOT
。然后,由于preparationGoals
的默认值为clean install
,验证规则将在被操纵的 POM上执行(其中版本没有-SNAPSHOT
)。它会失败,因为它(错误地)期望版本与-SNAPSHOT
一致。
那么如何发出信号呢,应该执行“释放”验证?
再次感谢