Maven打包后无法读取.env文件问题求助(io.github.cdimascio)
解决Maven打包后无法找到.env文件的问题
核心原因
IDE运行时,项目根目录属于classpath的一部分,./.env能被正确定位;但Maven打包成jar后,classpath的根是jar内部的目录结构,原路径无法匹配到.env文件——要么是.env没被打包进jar,要么是加载路径写法存在歧义。
解决方案
1. 确保.env被Maven打包到jar中
Maven默认不会将项目根目录的.env文件打包进jar,需要在pom.xml的build节点中添加资源配置,强制包含该文件:
<build> <resources> <!-- 包含项目根目录的.env文件 --> <resource> <directory>${project.basedir}</directory> <includes> <include>.env</include> </includes> <filtering>false</filtering> </resource> <!-- 保留原有资源目录的默认配置 --> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> </resource> </resources> </build>
配置完成后重新执行mvn package,.env会被打包到jar的classpath根目录。
2. 调整Dotenv加载路径
使用库提供的classpathResource方法明确加载classpath下的.env文件,避免路径歧义:
import io.github.cdimascio.dotenv.Dotenv; public class Devs { public static Dotenv getDotenv() { return Dotenv.configure() .classpathResource(".env") // 直接指定classpath根下的.env文件 .load(); } }
如果之前使用的是默认的Dotenv.load(),替换成上述写法即可。
3. 外部放置.env文件(可选)
若不想将.env打包进jar,可将其放在jar文件的同级目录,然后加载时指定当前工作目录:
Dotenv dotenv = Dotenv.configure() .directory(System.getProperty("user.dir")) // 获取jar的当前运行目录 .filename(".env") .load();
运行jar时,确保.env和jar处于同一文件夹下即可读取。
内容的提问来源于stack exchange,提问作者ArcaliteGames
相关产品推荐
相关产品推荐

