Skip to main content

Dotenvx能为Apache Maven做点什么?

· 3 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

Apache Maven是Java生态系统中最流行的构建工具之一,广泛应用于Java项目的构建、依赖管理和项目生命周期管理。 但是在某些场景下,我们可能需要在Maven构建过程中使用一些敏感信息,比如API密钥、数据库密码等, 典型的做法就是pom.xml文件中使用${env.VAR_NAME}来引用环境变量,然后在构建环境中设置这些环境变量即可。

典型的做法就是编写一个.env文件,然后填写相关的环境变量,然后使用一些.env支持的工具,如direnvjust - task runner等工具,都比较简单的。

如果不想使用普通明文的.env文件,而想使用Dotenvx加密版本的.env文件,那么应该如何做呢?

最简单的办法就是直接运行dotenvx run -- mvn -DskipTests clean package,这样dotenvx就会加载.env文件,并解密相关的配置项并加载为环境变量, 然后运行mvn命令即可。

如果你已经使用了direnv,那么你只需要在.envrc文件中添加如下内容:

eval $( dotenvx decrypt --stdout --format shell )

当然还有一种更简单的做法就是Maven Wrapper,执行 mvn wrapper:wrapper -Dmaven=3.9.11 会生成mvnw脚本, 然后你只需要修改mvnw脚本,在脚本中添加如下内容:

eval $( dotenvx decrypt --stdout --format shell )

这样在执行./mvnw xxx时,会自动调用dotenvx完成.env文件的解密和加载工作,非常简单方便。 修改mvnw脚本后,你可以将其提交到版本库中,这样其他同事在使用时,也可以直接使用./mvnw脚本来完成构建工作。 当然,.env提交到git仓库也是没有问题的,有加密保护,完全不用担心。

Tips: 这种方式同样适用于Gradle Wrapper。

Maven Wrapper对IDE工具也是友好的,如IntelliJ IDEA,在Maven设置项中,选择Use Maven Wrapper即可, 这样IntelliJ IDEA就会使用mvnw脚本来完成Maven构建工作,这样.env文件也会被自动加载。

Maven Wrapper方式同时对CI/CD也比较友好,目标服务器安装好dotenvx命令行,然后构建时设置好DOTENV_PRIVATE_KEY环境变量即可。

还记得以前使用CI/CD时,包括GitHub Actions,要设置一批环境变量,有时构建需要新的环境变量,本地也设置好,结果CI/CD环境忘记设置啦, 导致构建失败。现在就不用担心啦,只需要一个DOTENV_PRIVATE_KEY环境变量即可,其他的配置项都在.env文件中,随代码一起提交到git仓库, 你想修改就修改,完全不用担心环境变量同步的问题。