我是Maven的新手。 当我尝试引用任何maven插件文档时,我总是看到参数定义的以下格式: 名称描述 {参数名称} {description} 默认值为:... 用户属性是:...
在大多数情况下,我看到用户属性与参数名称相同。 我想知道“用户属性”和“参数名称”之间有什么区别。我认为参数名称在配置时指定对应插件的参数值时应该是元素标签名称,但是“用户属性”的用法是什么?
答案 0 :(得分:17)
注意:这适用于Maven 3.早期版本(有点)不同。
<强> TL; DR:强>
“用户属性”指定可用于设置插件参数的Maven property的名称。这允许从<configuration>
部分之外配置插件。请注意,这仅适用于<configuration>
部分中指定 的参数(请参阅MNG-4979 - Cannot override configuration parameter from command line)。
Maven属性可以在<properties>
部分的POM中设置,也可以在命令行中设置为-DmyProperty=myValue
。
长版
在Maven中,插件的参数通常设置在POM中的 <configuration>
部分中。插件文档中给出的“参数名称”是配置设置中使用的名称。
例如,Surefire目标surefire:test有一个参数“failIfNoSpecifiedTests”。要在POM中设置它,请使用:
<configuration>
<failIfNoSpecifiedTests>false</failIfNoSpecifiedTests>
</configuration>
但是,有时从<configuration>
部分外部设置插件参数很有用,例如在命令行或Maven配置文件中设置它。为此,插件还可以声明它将从Maven属性(如果设置)中读取参数值。此属性是文档列出的用户属性。
failIfNoSpecifiedTests的User属性为surefire.failIfNoSpecifiedTests
。因此,除了上面的<configuration>
部分,还可以使用属性surefire.failIfNoSpecifiedTests。例如:
-Dsurefire.failIfNoSpecifiedTests=false
<properties> <surefire.failIfNoSpecifiedTests> false </surefire.failIfNoSpecifiedTests> ...
请注意,每个参数的插件必须声明User属性,因此并非所有参数都有一个参数。例如,参数basedir
没有User属性,因此无法在命令行上设置。
在插件的源代码中,未显式声明参数名称;它取自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”取自字段名称。注释参数“property”定义要使用的Maven属性。
答案 1 :(得分:1)
我想我可能得到了答案,但仍然不能保证。 答案取决于包org.apache.maven.plugins.annotations中的注释类型参数。在此注释类型中,它定义了几个字段。其中:
答案 2 :(得分:-2)
它指的是财产适用的背景。例如,有一些系统属性,例如JVM版本,操作系统名称等,它们不是用户属性&#34;因为用户不应该设置它们。请注意,这不是Maven特定的概念,它是Java处理与配置相关的各种信息(即通常是平台或进程正在运行的上下文的特征)的更一般方式。 &#34;用户财产&#34;只是意味着用户,即运行Maven或配置Maven pom.xml的人正在设置属性值。