我有以下问题:我希望能够使用插件动态更改maven属性。例如,如果我配置了一个属性,例如:
<properties>
<someProperty>value</someProperty>
</properties>
字符串
我希望有一种方法可以在maven运行期间将其更改为“value-2”(而不是在此之前!例如,我不希望在命令行中使用-DsomeProperty=value-2)
我将尝试解释我的用例以澄清:我的pom.xml设置了一些默认属性。然而,我正在运行一个任务,该任务创建一个属性文件,该文件具有name=value对以匹配我的属性(例如,如果我在pom.xml中具有someProperty=value这样的属性,则run.properties文件具有someProperty=value-2属性).在一些maven运行期间,我想传递它我的属性文件的位置,并让它更改我的pom. xml中的默认属性。我已经尝试使用“properties-maven-plugin”为了实现这个目标,但这似乎只有在我没有在pom.xml本身中配置该属性时才有效。也就是说,如果我的pom.xml中的部分没有“someProperty”属性,那么更改成功。如果我有它,但是,这样就不会进行任何更改,即使在pom.xml中定义了某些属性,我也希望能够对其进行更改
有什么建议吗?提前感谢。
5条答案
按热度按时间sg3maiej1#
我一直在玩gmavenplus-plugin,它取代了旧的gmaven-plugin。在这个例子中,我试图有条件地将docker镜像上传到SNAPSHOT和RELEASE docker注册表,类似于maven-deploy-plugin的工作方式。使用此代码,我解析了这个版本并设置了一个指向正确的repo的属性。实现了maven插件。
字符串
8mmmxcuj2#
正如你所发现的,你不能使用POM的properties部分中定义的动态更改的属性值。如果你想知道为什么,请阅读这个答案。
为了使用动态值和默认值,你必须动态设置默认值。你可以使用GMaven插件,并将其配置为构建中的第一个插件。请参阅Guillaume Darmont的答案。
下面是为什么需要这样做的解释。Maven将属性值替换两次:
1.在开始时(可能在有效POM的组装期间),它替换静态属性(在属性部分中声明)
1.在每次运行插件之前,它会再次替换属性,因此现在使用动态值
上面的意思是,如果你有静态声明
<myProperty>
,然后你使用这个属性,比如${myProperty}
,在你有机会动态修改它之前,值就被注入了。之后你可以动态修改值,但是占位符已经被替换了,所以动态值无处注入。我也在这里回答了这个行为,也许在那里对某人解释得更好。
ttcibm8c3#
我不知道我是否完全理解你的问题,但你可以试试Groovy Maven Plugin
字符串
然后,简单地使用
${myDynamicProperty}
。希望这对你有帮助。
zlhcx6iw4#
this works for me
除了我不得不改变财产不同的名字:
字符串
因为使用相同的名称,它不工作-值没有被覆盖。
9rygscc15#
另一种选择是从一个插件写一个属性文件-像exec-maven-plugin - execution,然后通过properties-maven-plugin读取这个属性文件。例如:
字符串