【问题标题】:how to get property value from pom.xml?如何从 pom.xml 中获取属性值?
【发布时间】:2014-10-16 12:23:18
【问题描述】:

我在 pom.xml 中添加了一个节点:

<properties>
        <getdownload-webapp.version>1.5</getdownload-webapp.version>
</properties>

我怎样才能在代码中得到这个 1.5 的值?

String version = System.getProperty("getdownload-webapp.version"); // output version = null

这段代码在运行时给了我 null(

ps:本项目中没有settings.xml

【问题讨论】:

  • 如果你将 pom 打包到 META-INF,maven 通常会自动执行,你应该可以从那里读取它。
  • 这不是 JVM 属性,这类似于 Maven 中的变量:maven.apache.org/pom.html#Properties
  • 我可以将属性更改为资源或变量 - 但我如何从 java 代码中访问它们?
  • 我已经完成了码头并再次得到空结果

标签: java maven


【解决方案1】:

所以你有这样的属性。

<properties>
    <getdownload-webapp.version>1.5</getdownload-webapp.version>
</properties>

在您的 Maven 项目中创建如下文件。

  src/main/resources/project.properties

如果仅用于测试,则如下所示。

  src/test/resources/project.properties

在新文件中添加这一行。请注意,您不应以“properties”作为前缀(例如,不要写“properties.getdownload-webapp.version”)。

  version=${getdownload-webapp.version}

请注意,您也可以将这样的标志添加到文件中。

  debug=false

如果尚未完成,您必须为您的项目启用 Maven 过滤。该功能将在项目文件中查找占位符以替换为 pom.xml 中的值。为了继续,您需要在 pom.xml 文件的 &lt;build&gt; 标记中添加这些行。这是如何处理 src/main:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    ...

下面是 src/test 的方法:

<build>
    <testResources>
        <testResource>
            <directory>src/test/resources</directory>
            <filtering>true</filtering>
        </testResource>
    </testResources>
    ...

最后,在你的源代码(MyClassName.java)中,添加一个类似

的块
  Properties props = new Properties();
  props.load(MyClassName.class.getClassLoader().getResourceAsStream("project.properties"));
  String version = props.getProperty("version");

您可以在project.properties 文件中添加任意数量的变量,并使用此方法加载每个变量。

【讨论】:

    【解决方案2】:

    我假设您想在代码中获取它以检查某些内容,对吗?您可以使用来自 maven 的过滤,它将在源代码中注入值,类似于过滤选项 http://mojo.codehaus.org/templating-maven-plugin/

    【讨论】:

    • 另外,maven 资源插件可以通过 maven 属性过滤资源
    • 我无法调用过滤器,所有逻辑都只在java方法中-也许有一种使用资源的方法-但是如何在运行时读取它们的值?
    • 上面链接中的模板插件可以为你修改java文件。您可以执行类似 String version = ${getdownload-webapp.version} 之类的操作,然后在逻辑中使用版本变量
    • 我不仅需要版本,还需要其他一些字符串值。购买您建议的插件预发布的方式
    【解决方案3】:

    主要负责将 Maven 属性传输到 Java 应用程序的机制由 Maven Resource Plugin 提供

    插件是 Maven Super Pom 的一部分,在 Jar Default Lifecyleprocess-resources 阶段执行。你唯一需要做的就是激活filtering

    这将替换任何占位符,例如${my.property}src/main/resources 中的任何文件中,并带有来自您的 pom 的相应属性,例如&lt;property&gt;&lt;my.property&gt;test&lt;/my.property&gt;&lt;/property&gt;

    如何使这个属性对 Java 应用程序可用取决于您 - 从类路径中读取它会起作用。

    【讨论】:

      【解决方案4】:
      String version = project.getProperties().getProperty("getdownload-webapp.version");
      

      项目的类型为 MavenProject

      【讨论】:

        猜你喜欢
        • 2014-07-11
        • 2021-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多