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

Kotlin应用IntelliJ可运行但Maven编译报unresolved reference错误

问题根因排查及解决方案

1. 检查所有业务子模块(domain、dto、service等)的打包配置

Spring Boot默认的spring-boot-maven-plugin会把模块打包为可执行jar,内部类路径存放在BOOT-INF/classes/下,不符合普通依赖jar的标准结构,其他模块依赖时无法读取到类定义。

  • 如果你在父pom中全局配置了spring-boot-maven-plugin,必须把该插件移到仅web模块中配置,其他非启动业务子模块不要配置该插件
  • 其他非启动模块的pom.xml中明确设置打包类型为普通jar:
<packaging>jar</packaging>

如果必须在子模块保留Spring Boot插件,需要添加classifier配置区分可执行包和普通依赖包:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
            <configuration>
                <classifier>exec</classifier>
            </configuration>
        </execution>
    </executions>
</plugin>

2. 所有包含Kotlin代码的子模块都必须配置kotlin-maven-plugin

你当前仅在web模块配置了Kotlin编译插件,domain、dto、service这些用Kotlin编写的子模块如果没有配置该插件,执行mvn clean install时不会编译Kotlin代码,生成的jar包中没有对应类,自然会报找不到引用。
建议将web模块中配置的kotlin-maven-plugin移到父pom的pluginManagement节点统一管理,所有含Kotlin代码的子模块都引入该插件即可:
父pom添加pluginManagement配置:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <version>${kotlin.version}</version>
                <configuration>
                    <args>
                        <arg>-Xjsr305=strict</arg>
                    </args>
                    <compilerPlugins>
                        <plugin>spring</plugin>
                        <plugin>jpa</plugin>
                    </compilerPlugins>
                </configuration>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.jetbrains.kotlin</groupId>
                        <artifactId>kotlin-maven-allopen</artifactId>
                        <version>${kotlin.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.jetbrains.kotlin</groupId>
                        <artifactId>kotlin-maven-noarg</artifactId>
                        <version>${kotlin.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

每个含Kotlin代码的子模块pom中简化引入插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

3. 可选:优化父pom依赖配置规范

父pom中公共依赖建议放在dependencyManagement节点进行版本统一管理,子模块按需引入,避免不必要的依赖冲突。

修改完成后,在项目根目录执行mvn clean install即可正常编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:24:05