我是Maven的新手。
当我尝试引用任何Maven插件文档时,我总是会看到以下格式的参数定义:
名称说明
{参数名称} {说明}
默认值为:...
用户属性是:...
在大多数情况下,我看到用户属性与参数名称相同。
我想知道“用户属性”和“参数名称”之间有什么区别。我认为在配置它们时指定对应插件的参数值时,参数名称应为元素标签名称,但是“用户属性”的用法是什么?
最佳答案
注意:这是针对Maven 3的。早期版本有所不同。
TL; DR:
“用户属性”指定可用于设置插件参数的Maven property的名称。这允许从<configuration>
部分之外配置插件。请注意,这仅在<configuration>
部分中未指定参数的情况下有效(请参阅MNG-4979 - Cannot override configuration parameter from command line)。
Maven属性可以在POM的<properties>
部分中设置,也可以在命令行上设置为-DmyProperty=myValue
。
长版
在Maven中,通常在POM的 <configuration>
部分中设置插件的参数。插件文档中提供的“参数名称”是在配置设置中使用的名称。
例如,Surefire目标surefire:test具有参数“failIfNoSpecifiedTests”。要在POM中进行设置,请使用:
<configuration>
<failIfNoSpecifiedTests>false</failIfNoSpecifiedTests>
</configuration>
但是,有时从
<configuration>
部分之外设置插件参数很有用,例如,在命令行或Maven配置文件中进行设置。为此,插件还可以声明它将从Maven属性(如果已设置)中读取参数值。此属性是docs列出的用户属性。failIfNoSpecifiedTests的用户属性为
surefire.failIfNoSpecifiedTests
。因此,除了上面的<configuration>
部分,还可以使用属性surefire.failIfNoSpecifiedTests。例如:在命令行上通过指定
-Dsurefire.failIfNoSpecifiedTests=false
来实现POM配置文件中的
<properties> <surefire.failIfNoSpecifiedTests> false </surefire.failIfNoSpecifiedTests> ...
请注意,插件必须为每个参数声明User属性,因此并非所有参数都具有一个。例如,参数
basedir
没有用户属性,因此无法在命令行上设置。在插件的源代码中,未明确声明参数名称;它取自Java字段的名称。 source code for "failIfNoSpecifiedTests" is:
/**
* Set this to "true" to cause a failure if the none of the tests
* specified in -Dtest=... are run. Defaults to "true".
*
* @since 2.12
*/
@Parameter( property = "surefire.failIfNoSpecifiedTests" )
private Boolean failIfNoSpecifiedTests;
您可以看到参数名称“failIfNoSpecifiedTests”是从字段名称中获取的。注释参数“属性”定义要使用的Maven属性。
关于maven - Maven插件参数的用户属性是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23391502/