我有一个 .env 文件,其中包含以下内容:
SOME_PROPERTY_I_NEED_IN_MY_UNIT_TESTS=xyz
我需要 Maven 加载此 .env 文件并将其中的所有变量导出为环境变量以进行测试。
这需要是在文件系统上定义的文件(例如,在
/tmp/.env
中)而不是在类路径中。
我还需要通过 maven 加载它,因为这仅用于单元测试(实际上运行代码将从其他地方获取环境变量,而不是加载
.env
文件)。
我该怎么做?
您可以使用 Properties Maven 插件
来完成此操作下面是我实现此功能的 pom 文件的这一部分。我正在阅读
.env
和我的 application.properties
文件。
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<useDefaultValues>true</useDefaultValues>
<files>
<file>${project.basedir}/.env</file>
<file>${project.basedir}/src/main/resources/application.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
如果您正在运行
mvn test
,我认为这应该符合您的预期。
对于我最初的用例,我需要为 Maven Flyway 插件获取一些值。这需要包括
initialize
阶段:mvn initialize flyway:info
其次,我想使用
application.properties
文件中的 env 值。这允许这样做。所以如果 .env
有
DB_USERNAME=user
那么
application.properties
可以有
spring.datasource.username=${DB_USERNAME}
spring.flyway.user=${DB_MAINTENANCE_USERNAME:${DB_USERNAME}}
请注意,将
useDefaultValues
设置为 true
可以像我为 spring.flyway.user
那样设置后备值。否则,不需要该选项。