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

问题描述 投票:0回答:3

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

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

maven
3个回答
37
投票

注意:这是针对 Maven 3 的。早期版本(有点)不同。

TL;博士:

“用户属性”指定可用于设置插件参数的 Maven 属性 的名称。这允许从

<configuration>
部分之外配置插件。请注意,只有在<configuration>部分中指定了
not
参数时,这才有效(请参阅MNG-4979 - 无法从命令行覆盖配置参数)。

Maven 属性可以在 POM 中的

<properties>
部分设置,或者在命令行中设置为
-DmyProperty=myValue


长版

在 Maven 中,插件的参数通常在 POM 中的

<configuration>
部分中设置。插件文档中给出的“参数名称”是在配置设置中使用的名称。

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

    <configuration>
      <failIfNoSpecifiedTests>false</failIfNoSpecifiedTests>
    </configuration>

但是,有时从

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

failIfNoSpecifiedTests 的用户属性是

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;

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


1
投票

我想我可能已经得到了答案,但仍不能确定。 答案在于 org.apache.maven.plugins.annotations 包中的注释类型 Parameter。在这个注释类型中,它定义了几个字段。其中:

  1. alias:这应该定义插件文档中的参数名称。
  2. defaultValue:定义插件文档中每个参数指定的默认值。
  3. 属性:这定义了用户属性。根据该字段的注释,据说可以通过-D执行、设置属性或pom属性来指定该属性
  4. readonly:只读标志。
  5. required:是否强制。

-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.