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
相关产品推荐
相关产品推荐

