引用列表的 Maven 属性

标签 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>

问题是,到目前为止,我发现做到这一点的唯一方法是拥有两个具有重复插件配置的配置文件:一个具有预定义列表,另一个具有单个用户定义的值:

<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>

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

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

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

这样我的单值配置文件将简单地重新定义names属性。但当然,这并不容易实现:上面的代码示例会产生不可解析的 POM 错误。

有什么方法可以用其他 Maven 插件或技巧来做我想做的事情吗?

最佳答案

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

关于引用列表的 Maven 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24170098/

相关文章:

java - css文件不适用于我的jsp(maven/spring/hibernate元素)

java - jBOSS+ ESAPI java.lang.ClassCastException : org. jboss.logmanager.log4j.BridgeLogger 无法转换为 org.owasp.esapi.Logger

java - Tomcat - Mysql -Persistence ...无法创建资源

java - Jersey2 样本休息服务失败

css - CSS 中的 URL 应该如何引用资源文件夹中的图像

java - Struts2 排除 com.sun :tools:jar:1. 需要 5.0 吗?

maven - 如何将自定义构建的 jar 文件注册为 Maven 主 Artifact ?

maven - 可怜的排除方法专家

java - 有限的包含和排除不会通过 Maven 编译器插件发生

java - 在遗留 Java webapp 中的 web.xml 文件之间切换