【发布时间】:2020-08-02 20:13:07
【问题描述】:
有什么方法可以执行环境变量文件.env 以及mvn clean install 或mvn clean deploy 等maven 命令。我正在寻找类似解决方案的概念背后的主要思想:
mvn clean install -DenvFile=/path/<filename>.env
或
mvn clean deploy -DenvFile=/path/<filename>.env
或
mvn clean package -DenvFile=/path/<filename>.env
注意:不尝试生成特定于环境的构建。在开发环境中,我打算使用所有 从
<filename>.env配置的环境变量。
其中,上面的 maven 命令应该从<filename>.env 设置所有环境变量,然后执行 maven 插件。在 IntelliJ 中,有一个 envFile 插件完全相同。
不想在我的项目中使用特定于环境的属性dev|staging|prod.properties,因为它很混乱且难以管理。我宁愿拥有一个包含所有动态/可变属性的单一环境特定文件filename.env。
application.properties
spring:
cloud:
config:
uri: http://config-service:${CONFIG_SERVICE_PORT}
fail-fast: true
password: ${CONFIG_SERVICE_PASSWORD}
username: user
环境文件: .env
CONFIG_SERVICE_PORT=8080
CONFIG_SERVICE_PASSWORD=123
现在,当我在 AWS、GCP 和 Azure 等不同环境中部署应用程序时。我只需要更改.env 文件中的环境变量并运行应用程序java -DenvFile=/path/<fileName>.env -jar application.jar,它就会发挥作用。
我的问题与在dev-mode 中进行测试的maven-sure-fire 插件有关,它需要spring context 的这些环境变量。
任何帮助将不胜感激。
【问题讨论】:
-
为什么要创建特定的构建环境?无论您在什么环境中运行,Maven 理想情况下都应该运行相同。插件如何从这样的环境变量中受益?你能展示一个用例吗?最后一个问题 - “spring-boot-maven-plugin”与这个问题有什么关系?你有一些具体的用例吗?
-
@MarkBramnik - 不尝试使构建环境特定。请不要将自己与 maven
install/deploy/package命令混淆。这里的意图是将所有动态/可变属性保存在一个位置.env。因此,即使我在 java -DenvFile=/path/<fileName>.env -jar application.jar这样的不同环境中运行应用程序,应用程序也会获取所有属性并相应地运行。我只需要为不同的环境更改.env 即可运行我的应用程序。 -
@MarkBramnik - 使用 maven,问题在于 junit 测试,当您运行上面突出显示的
install/deploy/package的 maven 命令时,它基本上执行单元/集成测试,并且那些从 .properties 读取值。我不想在我的项目中使用特定于环境的application-<dev|prod|staging>.properties,因为它很乱。我认为最好的方法是保留一个environmentVariables.env文件并根据应用程序安装或部署的特定环境更改属性。 -
@MarkBramnik - 你对这个问题有什么想法吗? here.
标签: maven environment-variables maven-plugin spring-boot-maven-plugin