我能够从IntelliJ 2017.3启动Spring Boot Kotlin应用程序。在上次IntelliJ修复程序更新之后,我无法从IDE启动该应用程序,并遇到以下异常:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: @Configuration class 'AccessConfig' may not be final
我可以像往常一样从终端启动它: java -jar xxxx.jar
java -jar xxxx.jar
这没有任何意义,因为我在Gradle配置中使用了必要的Kotlin Spring插件:
buildscript { ext { kotlinVersion = '1.2.21' springBootVersion = '2.0.0.RC1' } repositories { mavenCentral() maven { url "https://repo.spring.io/snapshot" } maven { url "https://repo.spring.io/milestone" } jcenter() maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}") classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.3' classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.2' classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.5" } } apply plugin: 'kotlin' apply plugin: 'kotlin-spring' apply plugin: 'eclipse' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' apply plugin: 'maven' ... sourceCompatibility = 1.8 compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" } repositories { mavenLocal() maven { url "https://repo.spring.io/snapshot" } maven { url "https://repo.spring.io/milestone" } maven { url "http://repo.maven.apache.org/maven2" } maven { url 'https://jitpack.io' } } ext { springCloudVersion = 'Finchley.M5' mmaReleaseTrainVersion = 'Callao-SNAPSHOT' junitVersion = '5.0.2' }
有任何想法吗?
更新:
一种更简单的复制方式,只需使用IntelliJ中的Spring初始化程序创建一个Spring Boot项目,您将看到相同的结果:
演示应用程序:
@SpringBootApplication class DemoApplication fun main(args: Array<String>) { SpringApplication.run(DemoApplication::class.java, *args) }
错误:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: @Configuration class 'DemoApplication' may not be final. Remove the final modifier to continue. Offending resource: com.example.demo.DemoApplication
build.gradle:
buildscript { ext { kotlinVersion = '1.2.10' springBootVersion = '1.5.10.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}") } } apply plugin: 'kotlin' apply plugin: 'kotlin-spring' apply plugin: 'eclipse' apply plugin: 'org.springframework.boot' group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = 1.8 compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" } repositories { mavenCentral() } dependencies { compile('org.springframework.boot:spring-boot-starter-web') compile("org.jetbrains.kotlin:kotlin-stdlib-jre8:${kotlinVersion}") compile("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}") testCompile('org.springframework.boot:spring-boot-starter-test') }
修复了将IntelliJ的Kotlin插件升级到1.2.21的问题:https ://plugins.jetbrains.com/plugin/6954-kotlin/update/42501