执行mvn clean install时出现ExceptionInInitializerError错误求助
问题:执行
mvn clean install时Kafka配置解析失败 我在执行mvn clean install命令时遇到如下错误:
java.lang.ExceptionInInitializerError at abcConverterTest.setup(abcConverterTest.java:33) Caused by: org.apache.kafka.common.KafkaException: Failed to construct kafka producer at abcConverterTest.setup(abcConverterTest.java:33) Caused by: org.apache.kafka.common.config.ConfigException: Invalid url in bootstrap.servers: ${env:GRAYLOG_BOOTSTRAP_SERVER} at abcConverterTest.setup(abcConverterTest.java:33)
相关代码
测试类代码
class abcConverterTest { private abcConverter abcConverter; @Mock private ObjectMapper objectMapper; private static final String value = "xyz"; List<Object> detailsList = new ArrayList<>(); Map<String, Object> details = new HashMap<>(); Map<String, Object> details2 = new HashMap<>(); Map<String, Object> details3 = new HashMap<>(); @BeforeEach public void setup() { MockitoAnnotations.initMocks(this); this.abcConverter = new abcConverter(objectMapper); // this is line 33 details.put("key", "abcd"); details.put("value", "pqrs"); details2.put("key", "abcd1"); details2.put("value", "pqrs1"); details3.put("key", "abcd2"); details3.put("value", "pqrs2"); detailsList.add(details); detailsList.add(details2); detailsList.add(details3); } @Test void testConvertArguements() { String result = abcConverter.convertToColumn(null); Assertions.assertNull(result); } }
Converter类代码
@Slf4j @Component @RequiredArgsConstructor(onConstructor_ = @Autowired) public class abcConverter implements AttributeConverter<List<Object>, String> { private final ObjectMapper objectMapper; ...... ...... }
单独运行测试用例时(在配置中添加GRAYLOG_BOOTSTRAP_SERVER=some_value)正常,但执行mvn clean install时失败,请求帮助解决该问题。
解决方案
核心原因
mvn clean install执行测试阶段时,没有加载到GRAYLOG_BOOTSTRAP_SERVER环境变量,导致Kafka配置中的${env:GRAYLOG_BOOTSTRAP_SERVER}占位符无法解析,触发配置错误。
方案1:Maven命令直接传入参数
执行命令时附带环境变量参数,直接为测试阶段提供配置值:
mvn clean install -DGRAYLOG_BOOTSTRAP_SERVER=some_value
方案2:配置Surefire插件传递环境变量
在项目pom.xml中配置Maven Surefire插件,统一为测试阶段注入环境变量:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <configuration> <environmentVariables> <GRAYLOG_BOOTSTRAP_SERVER>some_value</GRAYLOG_BOOTSTRAP_SERVER> </environmentVariables> </configuration> </plugin> </plugins> </build>
方案3:隔离测试中的外部依赖
如果abcConverter或其依赖组件包含Kafka生产者初始化逻辑,建议在测试中隔离该依赖,避免真实配置加载:
- 使用
@MockBean替换真实的Kafka相关Bean:
@SpringBootTest class abcConverterTest { private abcConverter abcConverter; @Mock private ObjectMapper objectMapper; @MockBean private KafkaProducer<?, ?> kafkaProducer; @BeforeEach public void setup() { MockitoAnnotations.initMocks(this); this.abcConverter = new abcConverter(objectMapper); // 其他初始化代码 } // 测试方法 }
- 或者在测试配置文件(
src/test/resources/application.properties)中添加Kafka配置默认值:
bootstrap.servers=localhost:9092
内容的提问来源于stack exchange,提问作者Abhi
相关产品推荐
相关产品推荐

