sts4+boot3+jpa+gradle+jdk21 Ensure that the compiler uses the '-parameters' flag. gradle 설정으로 해결 안됨(버전으로해결)
결론 부터이야기 하면 저 Ensure that the compiler uses the '-parameters' flag. 이 에러가 언제 나오냐면 controller에서
@어노테이션이 붙은 값에 대한 매핑시에 오류가 나온다
예를 들어 get이나 post에서
@GetMapping("/{id}")
public ResponseEntity<UserID> getUserById(@PathVariable Long id)
이런 형태가 있다고 할때 boot 3부터 gradle 사용시는 안된다 저 이유는 검색해보면 spring 6부터 파라미터 맞추는 저 부분을 뺏다고 하는데 동일 버전의 maven에서는 이상이 없다 물론 명시적으로 주면 해결은 된다
@PathVariable Long id 이 부분을 => @PathVariable("id") Long id 이렇게 하거나
젤 좋은 방법이 gradle에서 설정을 추가해서 하는거라고 하는데
tasks.withType(JavaCompile) {
options.compilerArgs << "-parameters"
}
이거라고 해서 넣어도 마찬가지다 물론 gradle설정 변경하면 gradle project 새로고침 계속 해줘도 그렇고 아무튼 boot2로 가면 상관은 없고 아니면 maven 이거나...설명들이 대부분 intellj 에 맞춰 나오고 sts 용은 안보인다.
나중에 언제 해결 될라나...소스 수정하긴 싫고 테스트 프로젝트라서 현재는 boot2로 맞춘다
아 그리고 boot2 점대로 2.5.0 으로 가면 gradle에서 jdk17로 해야 된다 그래도 gradle에서 자꾸 컴파일 못찾는다고 나오는데 무시하고 구동해도 일단 동작은 한다.
나는 아직까지 실무 프로젝트는 maven으로 해야 겟다...
....maven은 clean할때마다 이상한 동작해서 이것도 이것 나름 짜증임....
몇번 수정하나 몰겟네
3.0.3에서 성공 했다. 첨에 테스트는 3.3.3이엇다
일단 gradle성공은 아래와 같다
====아 래====
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.3'
id 'io.spring.dependency-management' version '1.1.6'
}
group = 'com.example.demo'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
// PostgreSQL Driver
implementation 'org.postgresql:postgresql'
// Lombok (선택 사항)
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
줄정렬은 알아서....