Kotlin/Spring Boot应用Docker中Maven构建失败求助
问题:Kotlin/Spring Boot应用Docker构建时Kotlin编译失败
错误信息
执行docker build时出现以下编译错误:
[ERROR] Failed to execute goal org.jetbrains.kotlin:kotlin-maven-plugin:1.7.20:compile (compile) on project download-common: Compilation failure [ERROR] java.lang.IllegalStateException: Unable to find extension point configuration extensions/compiler.xml (cp: [ERROR] null) [ERROR] at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.registerApplicationExtensionPointsAndExtensionsFrom(KotlinCoreEnvironment.kt:612) [ERROR] at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createApplicationEnvironment(KotlinCoreEnvironment.kt:587) [ERROR] at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.getOrCreateApplicationEnvironment(KotlinCoreEnvironment.kt:518) [ERROR] at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.getOrCreateApplicationEnvironmentForProduction(KotlinCoreEnvironment.kt:499) [ERROR] at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createForProduction(KotlinCoreEnvironment.kt:443) [ERROR] at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.createCoreEnvironment(K2JVMCompiler.kt:192) [ERROR] at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:143) [ERROR] at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:53) [ERROR] at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:99) [ERROR] at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:47) [ERROR] at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101) [ERROR] at org.jetbrains.kotlin.maven.KotlinCompileMojoBase.execCompiler(KotlinCompileMojoBase.java:228) [ERROR] at org.jetbrains.kotlin.maven.K2JVMCompileMojo.execCompiler(K2JVMCompileMojo.java:237) [ERROR] at org.jetbrains.kotlin.maven.K2JVMCompileMojo.execCompiler(K2JVMCompileMojo.java:55) [ERROR] at org.jetbrains.kotlin.maven.KotlinCompileMojoBase.execute(KotlinCompileMojoBase.java:209) [ERROR] at org.jetbrains.kotlin.maven.K2JVMCompileMojo.execute(K2JVMCompileMojo.java:222) [ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:370) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:351) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:215) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:171) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:163) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81) [ERROR] at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) [ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:294) [ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192) [ERROR] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105) [ERROR] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:960) [ERROR] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:293) [ERROR] at org.apache.maven.cli.MavenCli.main(MavenCli.java:196) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [ERROR] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:566) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347) [ERROR] [ERROR] [ERROR] -> [Help 1]
本地与已尝试的修复
- 本地执行
mvn clean install -e可正常编译 - 已在
spring-boot-maven-plugin中添加requiresUnpack配置:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring.boot.version}</version> <configuration> <requiresUnpack> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-compiler</artifactId> </dependency> </requiresUnpack> </configuration> </plugin>
当前Dockerfile内容
# AS <NAME> to name this stage as maven FROM scratch LABEL MAINTAINER="Sam" #SETUP Ubuntu ENVIRONMENT FROM ubuntu:latest as ubuntu RUN export http_proxy=MY_PROXY_URL && export https_proxy=MY_PROXY_HTTPS_URL #INSTALL JAVA FROM eclipse-temurin:11-jdk-alpine AS jdk #INSTALL MAVEN FROM maven:3.8.6-eclipse-temurin-11-alpine AS maven COPY settings.xml /usr/share/maven/conf/ RUN apk update && apk add git && apk add net-tools procps openssh-client openssh-server RUN mkdir -p $HOME/images/lib/ && cd $HOME/images/lib/ RUN git clone MY_GIT_URL WORKDIR /download_code RUN git checkout feature/docker-branch RUN mvn clean install -e
解决思路
- 清理Dockerfile冗余阶段:当前的
scratch、ubuntu、jdk阶段完全未被使用,直接基于maven:3.8.6-eclipse-temurin-11-alpine构建即可,冗余阶段可能导致环境变量或依赖加载异常。 - 修复目录切换无效问题:
RUN mkdir -p $HOME/images/lib/ && cd $HOME/images/lib/中的cd仅在当前RUN命令生效,后续git clone仍会在默认目录执行,需调整为:
或使用RUN mkdir -p $HOME/images/lib/ && cd $HOME/images/lib/ && git clone MY_GIT_URLWORKDIR切换到目标目录后再执行克隆。 - 检查Maven镜像兼容性:Alpine镜像使用musl libc,可能与Kotlin编译器存在兼容性问题,尝试替换为非Alpine版本的Maven镜像,比如
maven:3.8.6-eclipse-temurin-11。 - 确保Kotlin依赖版本一致:在pom.xml中确认
kotlin-maven-plugin的版本与kotlin-stdlib、kotlin-reflect等核心依赖版本完全匹配。 - 完善Maven仓库配置:在pom.xml中添加Kotlin官方仓库,避免依赖下载不全:
<repositories> <repository> <id>kotlin-bintray</id> <url>https://kotlin.bintray.com/kotlinx/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>kotlin-bintray</id> <url>https://kotlin.bintray.com/kotlinx/</url> </pluginRepository> </pluginRepositories> - 验证代理配置有效性:如果构建需要代理,需确保
settings.xml中正确配置了代理规则,而非仅在未使用的Ubuntu阶段导出环境变量。
内容的提问来源于stack exchange,提问作者hell_storm2004
相关产品推荐
相关产品推荐

