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

命令行执行mvn test失败,Eclipse运行正常求排查方案

解决命令行执行mvn test时TestNG DTD加载失败的问题

从你贴出的错误栈里,核心问题其实非常明确:

TestNG by default disables loading DTD from unsecured Urls. If you need to explicitly load the DTD from a http url, please do so by using the JVM argument [-Dtestng.dtd.http=true]

简单来说,你的testng.xml里引用了HTTP协议的TestNG DTD文件,但TestNG 7+版本默认禁用了从非HTTPS的不安全URL加载DTD。而Eclipse里能正常运行,是因为TestNG插件默认帮你处理了这个限制,或者它的运行环境已经自动带上了允许加载的参数。

下面给你三个可行的解决方案,按推荐程度排序:

方案1:修改testng.xml的DTD引用为HTTPS(最安全)

直接把testng.xml开头的DTD引用从HTTP换成HTTPS,从根源解决问题,不需要额外配置:

<!-- 原来的HTTP引用 -->
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<!-- 修改为HTTPS -->
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">

这个方案既符合安全规范,也一劳永逸,不需要后续再关注参数问题。

方案2:在Maven Surefire插件中永久配置JVM参数

如果暂时不想修改testng.xml,可以在POM的maven-surefire-plugin里添加参数配置,让Maven执行测试时自动带上允许加载的JVM参数:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M5</version>
    <configuration>
        <forkMode>none</forkMode>
        <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
        </suiteXmlFiles>
        <!-- 新增这行,永久启用HTTP DTD加载权限 -->
        <argLine>-Dtestng.dtd.http=true</argLine>
    </configuration>
</plugin>

修改后直接执行mvn test就能正常运行,不用每次手动加参数。

方案3:临时执行命令时添加参数

如果只是临时测试,不想修改任何配置,可以在执行Maven命令时手动带上参数:

mvn test -Dtestng.dtd.http=true

补充:为什么Eclipse里没问题?

Eclipse的TestNG插件在运行测试时,默认已经开启了允许从HTTP加载DTD的设置,或者它的运行环境中自动注入了这个JVM参数,所以不会触发这个错误,这就是命令行和IDE环境的差异所在。

内容的提问来源于stack exchange,提问作者Nil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:43:01