You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:16:38