Maven 从发布插件执行Mojo

Maven 从发布插件执行Mojo,maven,maven-release-plugin,mojo,Maven,Maven Release Plugin,Mojo,我想编写一个mojo,其职责是根据一组规则(除了Maven指定的规则之外)验证POM。例如,它将确保有一个组织元素,并用公司的详细信息填充该元素 该插件将验证阶段定义为其默认阶段,它将进入公司的父pom,以便在任何构建时执行 问题在于,对于快照和发布版本,应该应用不同的规则集 现在,maven release插件在完成操作后(即,在release:prepare之后)执行一个clean verify。因此,我的插件将在此时执行。酷 问题是,因为它在发布上下文中,所以我需要应用发布规则集。但我不能

我想编写一个mojo,其职责是根据一组规则(除了Maven指定的规则之外)验证POM。例如,它将确保有一个
组织
元素,并用公司的详细信息填充该元素

该插件将
验证
阶段定义为其默认阶段,它将进入公司的父pom,以便在任何构建时执行

问题在于,对于快照和发布版本,应该应用不同的规则集

现在,maven release插件在完成操作后(即,在
release:prepare
之后)执行一个
clean verify
。因此,我的插件将在此时执行。酷

问题是,因为它在发布上下文中,所以我需要应用发布规则集。但我不能说它是在发布环境中;我不知道是谁/什么触发了它——“常规”构建,或者作为
发布:prepare
的“子过程”。没有任何迹象表明

一种解决方案是让
preparationGoals
填充例如
clean verify-DisRelease=true
,其中
isRelease
是插件为应用正确的规则集而查询的参数

但我不喜欢这个想法;它感觉像一个黑客,太脆弱了

因此,问题是:

有没有一种方法可以告诉我插件执行的上下文是什么,这样我就可以区分快照和版本了?是否有一种方法可以将配置绑定到目标,而不是一个阶段(因为在版本中,它不是一个阶段,而是一个
release:prepare
goal)?我还有别的方法可以做到这一点吗

提前感谢,

奥哈德

------------------编辑--------------------

由于一些误解,我举了一个可能的例子:

假设版本的组织思想是这样的:
{number}.{number}.p-{number}
,不管出于什么原因

因此,在“常规”构建中,将检查版本的格式是否为
{number}.{number}.p-{number}-SNAPSHOT
,在发布时,将检查版本的格式是否为
{number}.{number}.p-{number}

POM在CI中以带有
-SNAPSHOT
的版本开始,并通过验证。然后,开发人员想要发布它。因此执行
发布:prepare
,截取
-快照。然后,由于
preparationGoals
的默认值为
clean install
,因此验证规则将在操纵的POM上执行(其中版本没有
-SNAPSHOT
)。它将失败,因为它(错误地)希望版本与
-SNAPSHOT
一起

那么,我如何向它发出信号,应该执行“发布”验证呢


再次感谢

编写此类规则是maven enforcer插件的一项工作,如果您愿意,您可以在其中编写自己的规则?。您可以使用maven release plugin中的选项
useReleaseProfile
,在发布期间激活配置文件
release profile
:执行…?khmarbaise,我不确定我是否得到它。。。假设我使用maven enforcer插件API编写自定义规则。我有一套规则来申请发布和其他我需要申请的“常规”构建。我怎么能把一个和另一个区别开来呢?你说-
useReleaseProfile
。但是
release:prepare
的默认
preparationGoals
clean verify
。在这种情况下,将不会有
useReleaseProfile
,这意味着,代码将应用“常规”构建规则集,而不是版本。。。(它将失败,因为检查是在POM操作之后进行的)。请详细说明。请看这里:@khmarbaise,谢谢您的及时回复。我确实查看了指定的URL,但恐怕看不到连接。如果我理解正确,您建议查询此标志-如果
true
-我在发布流中,否则-我在“常规”构建流中。但这是错误的。此标志是为
release:perform
定义的,而问题在于
release:prepare
。如[,默认的
preparationGoals
clean verify
。当它运行时,我无法判断它是由于
release:prepare
。不,通过配置文件,您可以使用它来识别是否发布。编写此类规则是maven enforcer插件的工作,如果您愿意,您可以编写自己的规则。您可以使用选项
>在maven release plugin中使用useReleaseProfile
,以便在发布期间激活配置文件
发布配置文件
:执行…?khmarbaise,不确定我是否得到它…假设我使用maven enforcer plugin API编写自定义规则。我有一组规则要申请发布,其他我需要申请“常规”构建。我如何区分它们呢?你说-
useReleaseProfile
。但是
release:prepare
的默认
preparationGoals
clean verify
。在这种情况下,将不存在
useReleaseProfile
。这意味着,代码将应用“常规”构建规则集,而不是发布版。。。(它会失败,因为检查是在POM操作后进行的)。请详细说明。请看这里:@khmarbaise,感谢您的及时回复。我确实查看了指定的URL,但恐怕看不到连接。如果我理解正确,您建议查询此标志-如果
为true
-我在发布流中,否则-我在发布流中“常规”生成流。但这是错误的。此标志是为
发布:执行
定义的,而问题在于
发布:准备
。如中所述[,默认的
preparationGoals
clean verify
。当它运行时,我无法判断它是由于
release:prepare
。否通过配置文件,您可以使用它来识别是否处于发布状态。