Kotlin maven plugin配置后未生成无参构造器问题求助
问题根因与修正方案
你当前的配置存在3处错误,导致noarg插件未生效,无法为@Entity注解的类自动生成无参构造:
- 生效的执行配置未启用noarg插件:你当前使用的execution内部的compilerPlugins仅声明了
spring和jpa插件,缺少noarg插件的显式声明,无参构造生成逻辑未启动 - 配置作用域错误:将编译规则配置放在execution标签内,仅对当前id为compile的执行任务生效,其余编译相关流程读取不到该配置
- 你注释掉的全局配置本身逻辑正确,但没有取消注释生效,且你当前运行的是带execution的配置逻辑
修正后的完整Maven配置
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.5.6</version> </plugin> <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> <plugin>noarg</plugin> <plugin>all-open</plugin> </compilerPlugins> <pluginOptions> <option>all-open:annotation=javax.persistence.Entity</option> <option>all-open:annotation=javax.persistence.Embeddable</option> <option>all-open:annotation=javax.persistence.MappedSuperclass</option> <!-- noarg插件匹配和all-open一致的JPA注解 --> <option>noarg:annotation=javax.persistence.Entity</option> <option>noarg:annotation=javax.persistence.Embeddable</option> <option>noarg:annotation=javax.persistence.MappedSuperclass</option> </pluginOptions> </configuration> <executions> <execution> <id>compile</id> <phase>process-sources</phase> <goals> <goal>compile</goal> </goals> </execution> <!-- 保留test编译配置,避免测试代码编译报错 --> <execution> <id>test-compile</id> <phase>process-test-sources</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>
生效操作步骤
配置修改完成后按以下步骤操作即可正常使用无参构造:
- 在IDEA中右键pom.xml,选择
Maven > Reload project,让IDE识别新的编译器插件规则,消除代码编辑区的报错提示 - 执行
mvn clean compile命令重新编译项目
内容的提问来源于stack exchange,提问作者Syed Ali
相关产品推荐
相关产品推荐

