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

Ubuntu 22.04下Maven编译TestNG报错:Error creating object factory

解决Surefire启动Fork进程时TestNG对象工厂创建失败问题

问题重现

在Ubuntu 22.04系统的IntelliJ中编译Maven项目时,执行特定测试抛出如下错误:

org.testng.TestNGException: Error creating object factory: class com.project.AbstractClassTest

相关背景及环境:

  • AbstractClassTest继承自PowerMock的PowerMockTestCase类,且该类包含带@ObjectFactory注解的方法
  • 当前依赖版本:
    • Maven 3.6.3
    • JDK 1.8.362
    • Surefire 2.22.2
    • TestNG 6.14.3
    • PowerMock 1.7.4

已尝试无效操作:

  • 降级Surefire和TestNG版本
  • 删除本地Maven仓库、清理缓存后执行mvn clean install
  • 添加-DskipTests参数可成功构建,但执行测试仍失败
  • 同代码仓库在同事环境可正常运行,推测为本地环境问题

排查与解决方案

1. 修正IntelliJ测试运行配置

  • 打开IntelliJ的Run/Debug Configurations,找到对应的测试配置
  • 在VM options中添加PowerMock必备的javaagent参数(替换为本地Maven仓库中对应jar的实际路径):
    -javaagent:~/.m2/repository/org/powermock/powermock-module-javaagent/1.7.4/powermock-module-javaagent-1.7.4.jar
    
  • 勾选Use classpath of module,确保依赖加载路径正确

2. 调整Surefire插件配置

在项目pom.xml中修改Surefire插件配置,强制指定PowerMock的TestNG对象工厂,避免自定义@ObjectFactory方法冲突:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
            <configuration>
                <forkCount>1</forkCount>
                <reuseForks>false</reuseForks>
                <useSystemClassLoader>false</useSystemClassLoader>
                <argLine>
                    -javaagent:${settings.localRepository}/org/powermock/powermock-module-javaagent/1.7.4/powermock-module-javaagent-1.7.4.jar
                </argLine>
                <properties>
                    <property>
                        <name>objectFactory</name>
                        <value>org.powermock.modules.testng.PowerMockObjectFactory</value>
                    </property>
                </properties>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.powermock</groupId>
                    <artifactId>powermock-module-testng</artifactId>
                    <version>1.7.4</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

3. 校验本地JDK环境一致性

  • 执行终端命令确认当前使用的JDK版本:
    java -version
    
  • 在IntelliJ中通过File > Project Structure > Project确认Project SDK为1.8.362,且所有Module SDK与之一致

4. 重置IntelliJ缓存与项目配置

  • 执行File > Invalidate Caches...,勾选"Clear file system cache and local history"后重启IntelliJ
  • 删除项目根目录下的.idea文件夹,重新导入Maven项目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:50:15