IntelliJ Idea 2017.3 Kotlin Spring Boot App을 시작할 수 없음 - @Configuration 클래스가 final이 아닐 수 있습니다.
저는 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
내 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')
}
무엇보다도, 이 모든 것은 클래스 코틀린 클래스 정의 때문입니다.
그
open
클래스의 주석은 Java의 주석과 반대입니다.final
다른 사용자가 이 클래스에서 상속할 수 있습니다.기본적으로 Kotlin의 모든 클래스는 final입니다.
그래서 만약 당신이 당신의 소스 코드를 자유롭게 수정할 수 있다면, 당신은 당신의 수업을 final이 아닌, 단지 추가할 수 있습니다.open
다음과 같이 서명합니다.
@SpringBootApplication
open class DemoApplication
fun main(args: Array<String>) {
SpringApplication.run(DemoApplication::class.java, *args)
}
또는 이 문서에 따라 가능한 해결책 중 하나:
그
@SpringBootApplication
클래스를 표시하는 편리한 주석입니다.@Configuration
,@EnableAutoConfiguration
그리고.@ComponentScan
주석바로 그것입니다.@Configuration
open 키워드를 강제로 사용하는 주석입니다.
그것을 제거하려고 노력하는 것입니다.@SpringBootApplication
클래스에 주석 및 주석 달기@EnableAutoConfiguration
그리고.@ComponentScan
이 문제를 해결하기 위해.
IntelliJ의 Kotlin 플러그인을 1.2.21로 업그레이드 수정: https://plugins.jetbrains.com/plugin/6954-kotlin/update/42501
IntelliJ에서 이 오류가 발생하면 kotlin-spring 플러그인에서도 IntelliJ에서 주석 처리가 활성화되었는지 확인해야 할 수 있습니다.
플러그인 업데이트가 도움이 되지 않으면 그라들의 코틀린 버전이 ide의 코틀린 버전과 일치하는지 확인합니다.
이를 통해 해결되었습니다(플러그인에 다음 행만 추가).
plugins {
id "org.jetbrains.kotlin.plugin.spring" version "1.5.10"
}
또는 이러한 접근 방식:
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
}
}
apply plugin: "kotlin-spring"
메이븐에서:
<compilerPlugins>
<plugin>spring</plugin>
</compilerPlugins>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
스프링 애플리케이션이 아닌 경우 다음을 수행합니다.
plugins {
id "org.jetbrains.kotlin.plugin.allopen" version "1.5.10"
}
또는 이러한 접근 방식:
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
}
}
apply plugin: "kotlin-allopen"
그런 다음 클래스를 열 주석 목록을 지정합니다.
allOpen {
annotation("com.my.Annotation")
}
메타 주석 작업:
@com.my.Annotation
annotation class MyFrameworkAnnotation
@MyFrameworkAnnotation
class MyClass //all-open
메이븐과 함께 올오픈을 사용하는 방법:
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
<plugin>all-open</plugin>
</compilerPlugins>
<pluginOptions>
<option>all-open:annotation=com.my.Annotation</option>
<option>all-open:annotation=com.their.AnotherAnnotation</option>
</pluginOptions>
</configuration>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
kotlin에서 모든 Spring 관련 클래스에 대해 열린 동작을 기본값으로 설정해야 하는 경우,kotlin-allopen
여기서부터 플러그인
https://search.maven.org/classic/ #search%7Cga%7C1%7Ckotlin%20모두열림
더 많은 정보: https://www.baeldung.com/kotlin-allopen-spring
언급URL : https://stackoverflow.com/questions/48544015/intellij-idea-2017-3-unable-to-start-kotlin-spring-boot-app-configuration-cla
'programing' 카테고리의 다른 글
수식을 사용하여 배열 필터링(VBA 없음) (0) | 2023.06.20 |
---|---|
SQL 요청 "...에 구문 오류가 있습니다.오버...주문 기준... 사이..."(이전 버전과 새 버전) (0) | 2023.06.20 |
CTE에서 에 삽입 (0) | 2023.06.20 |
springapplication.properties 파일의 resources 폴더에 파일 지정 (0) | 2023.06.20 |
마리아에서 항상 생성됨DB (0) | 2023.06.20 |