Maven属性引用列表

时间:2014-06-11 18:33:15

标签: maven

我正在使用(自定义,内部开发,详细信息无关紧要)Maven插件,它带有一个名称列表,如下所示:

<configuration>
    <names>
        <name>Alice</name>
        <name>Bob</name>
        <name>Joe</name>
        <name>Sally</name>
    </names>
    ...

该列表在POM文件中进行了硬编码。

我希望有一些更动态的东西,以便我可以使用用户定义的变量来指定单个名称。我可以这样做:

  

mvn clean package -Dname = Bob

<configuration>
    <names>
        <name>${name}</name>
    </names>

问题在于,到目前为止我发现的唯一方法是使两个配置文件具有重复的插件配置:一个具有预定义列表,另一个具有单个用户定义值:< / p>

<profiles>
  <profile>
    <id>default</id>
        ...
        <configuration>
          <names>
              <name>Alice</name>
              <name>Bob</name>
              <name>Joe</name>
              <name>Sally</name>
          </names>
        ...
  </profile>

  <profile>
    <id>single-value</id>
    <activation>
      <property>
        <name>name</name>
      </property> 
    </activation>
    ...
      <configuration>
        <names>
          <name>${name}</name>
        </names>
    ...
  </profile>
</profiles>

这样可行,但我的问题是两个配置文件的配置几乎完全相同(并且它们也是相当冗长的配置),对于这个插件,除了名称列表

我想要做的是让Maven属性包含一个列表,而不是一个值。像这样:

<project>
  <properties>
    <names>
      <name>bob</name>
    </names>
  </properties>
  ...

这样我的single-value个人资料就可以简单地重新定义names属性。但是,当然,这并不容易:上面的代码示例产生了一个不可解析的POM错误。

有没有办法用其他Maven插件做我想要的东西,或者招技?

1 个答案:

答案 0 :(得分:2)

使用带逗号分隔值的参数。在您的代码中,将此String转换为字符串列表。您应该真的想知道是否希望通过命令行设置它,或者它是否足以仅在插件配置中执行此操作。后者当然是优选的。 仅作为一个小例子:见http://maven.apache.org/plugins/maven-site-plugin/site-mojo.html#locales