maven插件参数的用户属性是什么意思

Aud*_*son 14 maven

我是Maven的新手.当我尝试引用任何maven插件文档时,我总是看到参数定义的以下格式:名称说明{参数名称} {description}默认值为:... 用户属性为:...

在大多数情况下,我看到user属性与参数名称相同.我想知道"用户属性"和"参数名称"之间的区别.我认为参数名称在配置它们时指定对应插件的参数值时应该是元素标签名称,但是"用户属性"的用法是什么?

sle*_*ske 20

注意:这适用于Maven 3.早期版本(有点)不同.

TL; DR:

"User property"指定可用于设置插件参数的Maven属性的名称.这允许从该<configuration>部分外部配置插件.请注意,这仅在该部分指定参数时有效<configuration>(请参阅 MNG-4979 - 无法从命令行覆盖配置参数).

Maven属性可以在部分的POM中设置,也可以在<properties>命令行中设置为-DmyProperty=myValue.


长版

在Maven中,插件的参数通常设置在POM的一个<configuration>部分中.插件文档中给出的"参数名称"是配置设置中使用的名称.

例如,Surefire目标surefire :test有一个参数"failIfNoSpecifiedTests".要在POM中设置它,请使用:

<configuration>
<failIfNoSpecifiedTests>false</failIfNoSpecifiedTests>
</configuration>
Run Code Online (Sandbox Code Playgroud)

但是,有时从该<configuration>部分外部设置插件参数很有用,例如在命令行或Maven配置文件中设置它.为此,插件还可以声明它将从Maven属性(如果设置)读取参数值.此属性是文档列为User属性的属性.

failIfNoSpecifiedTests的User属性是surefire.failIfNoSpecifiedTests.因此,除了<configuration>上面的部分,还可以使用属性surefire.failIfNoSpecifiedTests.例如:

  • 在命令行上,通过指定 -Dsurefire.failIfNoSpecifiedTests=false
  • 在POM配置文件中: <properties> <surefire.failIfNoSpecifiedTests> false </surefire.failIfNoSpecifiedTests> ...

请注意,必须通过插件为每个参数声明User属性,因此并非所有参数都具有一个参数.例如,参数basedir没有User属性,因此无法在命令行上设置.


在插件的源代码中,参数名称未明确声明; 它取自Java字段的名称."failIfNoSpecifiedTests"源代码是:

/**
 * 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;
Run Code Online (Sandbox Code Playgroud)

您可以看到参数名称"failIfNoSpecifiedTests"取自字段名称.注释参数"property"定义要使用的Maven属性.

  • 我想补充一点,命令行上提供的任何属性都会覆盖`<properties />`pom部分([source](http://stackoverflow.com/a/18061001/3041008))中定义的属性.因此,为了获得最大的灵活性,我建议在`<properties />`中指定默认的用户属性值,可以在命令行覆盖它们,而不是在`<configuration />`部分中对它们进行硬编码.例如,一个这样的属性`maven.compiler.source`和`maven.compiler.target`. (3认同)

Rob*_*Rob -2

它指的是属性应用的上下文。例如,诸如 JVM 版本、操作系统名称等系统属性不是“用户属性”,因为用户不应该设置它们。请注意,这不是 Maven 特定的概念,而是 Java 处理与配置相关的各种信息(即通常是进程运行所在的平台或上下文的特征)的更通用方式。“用户属性”仅意味着用户(即运行 Maven 或配置 Maven pom.xml 的人)正在设置属性值。