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

Micronaut库项目中EmbeddedServer Bean不存在问题排查

问题解决:Micronaut库项目无法实例化EmbeddedServer

问题重现

以下代码在Micronaut最小应用的测试中可正常运行,但使用io.micronaut.minimal.library插件构建库项目时失败:

fun run(applicationProperties: Map<String, Any> = emptyMap()): ApplicationContext {
    val applicationContext = ApplicationContext.run(applicationProperties)
    embeddedServer = applicationContext.getBean(EmbeddedServer::class.java)
    return applicationContext
}

已添加测试依赖(runtime、kotlin-runtime)及application.yml,注释掉embeddedServer相关代码即可正常构建。需求是将这段逻辑做成可复用的测试夹具,但目前缺少实例化EmbeddedServer的必要条件,唯一差异是使用了库插件而非应用插件。

核心原因

Micronaut的minimal.library插件默认不包含嵌入式服务器的自动配置与依赖,而minimal.application插件会自动引入这些内容,导致库项目中找不到EmbeddedServer的实现类。

修复步骤

  1. 添加嵌入式服务器测试依赖
    在构建脚本中明确引入嵌入式服务器的starter依赖(以Netty为例):
  • Gradle(Kotlin DSL):
testImplementation("io.micronaut:micronaut-http-server-netty")
  • Maven:
<dependency>
    <groupId>io.micronaut</groupId>
    <artifactId>micronaut-http-server-netty</artifactId>
    <scope>test</scope>
</dependency>
  1. 配置测试环境的应用参数
    在src/test/resources/application.yml中添加基础配置,确保嵌入式服务器配置被加载:
micronaut:
  application:
    name: library-test-fixture
  server:
    port: 8081 # 可自定义测试端口
  1. 明确加载服务器配置模块
    如果测试夹具未通过@MicronautTest启动上下文,可在run方法中指定加载嵌入式服务器的配置包:
fun run(applicationProperties: Map<String, Any> = emptyMap()): ApplicationContext {
    val applicationContext = ApplicationContext.run(
        applicationProperties,
        "io.micronaut.server" // 指定嵌入式服务器配置包
    )
    embeddedServer = applicationContext.getBean(EmbeddedServer::class.java)
    return applicationContext
}

完成以上配置后重新构建,测试夹具中的EmbeddedServer即可正常实例化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:17:08