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