【问题标题】:How to inject a variable value into two maven modules in Java?如何将变量值注入Java中的两个maven模块?
【发布时间】:2015-06-16 14:12:56
【问题描述】:

我有一个带有 pom.xml 的大项目,并且该项目中的几个模块都有自己的 pom.xml。其中两个模块依赖于同一个变量(数据库名称)。

是否有一种现有的模式可以在一个地方命名这个变量,并将它注入到两个项目中?我想有一个 maven 插件,但找不到。

需要将变量注入到 java 文件和 xml 文件中

【问题讨论】:

  • 听起来像 java 配置而不是 maven 配置?如果是这种情况,您应该考虑在运行时加载的外部配置文件。
  • 为什么不添加一个普通项目呢?使用 maven,我认为您可以使用父 pom 共享属性。
  • 你可能是对的。当我只需要一个变量时,创建一个完整的配置文件感觉不对
  • 你可以共享属性,但我不认为 pom 可以将这些属性传递到 java 文件中
  • 我正在寻找可以在 java 文件中执行 variable= 的东西,然后在构建时 maven 将变量注入到它看到 的文件中.外部配置文件或其他一些解决方案可能也可以工作。

标签: java maven module


【解决方案1】:

我在 cmets 中说过,但我相信这就是您要找的。您可以使用MAVEN_OPTS 指定在运行时注入的变量。

export MAVEN_OPTS="-D{parameter_name}={parameter-value}"

因此,如果您想要一个名为“foo”且值为“bar”的变量,您会这样做

export MAVEN_OPTS="-Dfoo=bar"

要在您的 XML 文件中访问此变量,您可以使用 ${foo}(或您所称的任何名称),如下所示:

<value>classpath:contexts/${foo}.properties</value>

(以上只是我正在从事的使用相同技术的项目中的一个 sn-p)

【讨论】:

    【解决方案2】:

    我的解决方案是在我们的 chef 部署中包含这个变量,这样我们就可以将它存入一个配置文件中。从那里,Java 代码能够访问该变量。

    xml 文件是一个 Oozie 工作流,所以我还使用 chef 将相同的变量存入 Oozie 协调器。

    这个答案可能不会帮助任何人试图只使用 maven 来解决这个问题,但它是对我有用的解决方案。

    我相信如果您只处理 Java 问题,java.util.Properties 可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 2014-02-06
      • 1970-01-01
      • 2019-09-30
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多