크리티컬 한 오류는 아니지만 IntelliJ에서 작동이 안 되길래 찾아본 오류입니다.
🤔 문제발생
@ConfigurationProperties(prefix = "spring.thymeleaf")를 사용하여 사용자 정의 프로퍼티(spring.thymeleaf3)를 만드는 코드를 작성했습니다.
물론 main 메서드가 있는 클래스에서 해당 프로퍼티를 스캔할 수 있도록 @ConfigurationPropertiesScan도 붙여줬습니다.
/* 앞 코드 생략 */
@Getter
@RequiredArgsConstructor
@ConstructorBinding
@ConfigurationProperties(prefix = "spring.thymeleaf3")
public static class Thymeleaf3Properties {
/**
* Thymeleaf 3 Decoupled Logic 기능의 활성화
*/
private final boolean decoupledLogic;
}
/* 뒤 코드 생략 */
그리고 나서 사용자 정의 프로퍼티에 대한 지원을 해주는 의존성인 configuration-processor도 추가해 줬습니다.
// build.gradle
dependencies {
/* 생략 */
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
}
위 의존성을 추가해 주고, gradle을 다시 build 했습니다. 그리고 나서 application.properties에 들어가서 사용자 정의한 "spring.thymeleaf3"가 자동완성되는지 확인했는데, 작동이 안 됐습니다.
🙆🏻♂️ 시도 & 해결
구글링에 들어갔습니다. 주요 검색 키워드는 configuration-processor is not working...
(1) Clean 하고 다시 Build를 해보자.
수도 없이 해봤지만 작동하지 않았습니다. IntelliJ 캐시 문제인가..?라는 생각이 들어서 캐시를 비우고, IDE를 재시작하고 여러 방법을 시도해 봤습니다.
이 방법도 근데 소용은 없었습니다. 그럼 캐시 문제도 아니고, 빌드의 문제도 아니라는 것입니다.
(2) 사용자 정의 프로퍼티를 만들면 spring-configuration-metadata.json 파일이 생성된다는 글을 발견
어디에 생성되는지 찾아보니 아래와 같은 경로에 생성되었습니다.
build/classes/java/main/META-INF/spring-configuration-metadata.json
json 파일로 생성되고, 우리가 Java Doc으로 작성한 내용도 저장되며, 해당 프로퍼티에 대한 메타 데이터가 들어가 있는 파일이었습니다.
{
"groups": [
{
"name": "spring.thymeleaf3",
"type": "com.fastcampus.getinline.config.ThymeleafConfig$Thymeleaf3Properties",
"sourceType": "com.fastcampus.getinline.config.ThymeleafConfig$Thymeleaf3Properties"
}
],
"properties": [
{
"name": "spring.thymeleaf3.decoupled-logic",
"type": "java.lang.Boolean",
"description": "Thymeleaf 3 Decoupled Logic 기능의 활성화",
"sourceType": "com.fastcampus.getinline.config.ThymeleafConfig$Thymeleaf3Properties",
"defaultValue": false
}
],
"hints": []
}
즉, Build는 정상적으로 되었고 메타 데이터도 정상적으로 들어왔다는 것이 확인되었습니다.
그럼 문제는 하나 IntelliJ에서 해당 메타 데이터를 인식하지 못한다는 점이었습니다.
(3) IntelliJ Project Setting 변경
그렇게 구글을 찾아서 돌아다니다가 글 하나를 발견했습니다.
https://youtrack.jetbrains.com/issue/IDEA-191886
spring-configuration-metadata.json ignored in Gradle "build" directory : IDEA-191886
I am trying to get IDEA to recognize custom properties in my Spring Boot application. The required metadata file is generated by Gradle in "build/classes/java/main/META-INF/spring-configuration-metadata.json" but IDEA does not seem to recognise it. As soon
youtrack.jetbrains.com
제목부터가 "spring-configuration-metadata.json ignored in Gradle "build" directory"이어서 뭔가 내가 찾던 문제와 같은 문제를 겪고 있는 거 같았습니다.
The required metadata file is generated by Gradle in "build/classes/java/main/META-INF/spring-configuration-metadata.json" but IDEA does not seem to recognise it.
해당 글 중에서 제가 말했던 경로에 metadata.json이 만들어는 졌는데 IDEA가 그걸 인지하지 못한다는 질문이었습니다. 역시... 구글링은 영어로 하는 것이 정답인가... 영어를....
해당 질문 댓글 중에서 해결책 하나가 쓰여있는 거 같아서 해봤습니다.
IntelliJ에서 Project Structrue에 들어갑니다. 맥에서는 {Command + ;}를 누르면 들어가집니다. 위 Tool bar를 통해서도 들어갈 수 있습니다.
Modules -> main -> Paths를 눌러보면 아래와 같은 화면이 나옵니다.
Output path를 보면 지금 out/production/classes로 되어 있는데, 이것을 Metadata.json이 있던 경로로 변경해 줬습니다.
out/production/classes -> build/classes/java/main으로 변경해 줬습니다.
그리고 나서 Gradle clean을 하고 다시 build를 해주고 나서 application.properties에서 사용자 정의한 "spring.thymeleaf3"이 자동완성이 되는지 해봤습니다.
우와...됐다... 이전에는 자동완성이 나오지 않았었는데, spring.만 쳐도 thymeleaf3가 나오는 것을 볼 수 있습니다.
🙆🏻♂️ 알게 된 점 & 느낀 점
- 구글링을 한글로 막 검색하다 보니 자료도 많이 안 나왔던 거 같습니다.
- 해당 문제가 뭐 때문에 발생하는지 판단을 먼저 해야 정확한 구글링이 될 수 있다는 것을 느꼈습니다.
- 저는 해당 문제가 Spring configuration processor의 문제라고 생각하고, 그쪽으로 검색을 엄청했었는데, IntelliJ의 문제일 수도 있겠다는 생각으로 검색을 하니 방법을 찾을 수 있었다고 생각합니다.
📘 참고자료
Configuration Metadata
Configuration metadata files are located inside jars under META-INF/spring-configuration-metadata.json. They use a JSON format with items categorized under either “groups” or “properties” and additional values hints categorized under "hints", as sh
docs.spring.io
'🧑🏻💻 Dev > 오류해결' 카테고리의 다른 글
@DataJpaTest Rollback 후 Id 초기화 안됨 (0) | 2023.06.19 |
---|---|
Mustache 사용해서 html 파일 읽을 때 한글 깨짐 (0) | 2023.06.08 |
[오류해결] No serializer found for class (InvalidDefinitionException) (0) | 2023.04.20 |
[오류해결] JSP img GET 요청 시 한글 깨짐 (0) | 2023.03.14 |
[오류해결] 로컬에 있는 이미지 파일 JSP에서 사용하기 (0) | 2023.03.02 |