❗️문제 상황
✉️ 에러메시지:
Could not get unknown property "'convention'" for root project
'blackjack_experiment' of type org.gradle.api.Project.
- IntelliJ에서 AAA 클래스의 main() 메서드를 실행하면 에러 발생 (일반 자바 메인 메서드)
public class AAA {
public static void main(String[] args) {
System.out.println("aa");
}
}
- 동일 프로젝트의 BlackjackExperimentApplication의 main()은 정상 실행 (스프링 기반 메인 메서드)
@SpringBootApplication
public class BlackjackExperimentApplication {
public static void main(String[] args) {
SpringApplication.run(BlackjackExperimentApplication.class, args);
}
}
즉, 같은 프로젝트인데 실행 대상에 따라 결과가 다름
💡 원인 파악 및 해결 과정
1️⃣ 실행 방식 차이
IntelliJ는 main() 실행 시 두 가지 방식 중 하나를 사용합니다.
실행 방식 동작 방식
| IntelliJ Application 실행 | IDE가 직접 JVM으로 실행 |
| Gradle 실행 (Delegate to Gradle) | Gradle을 통해 빌드 + 실행 |
현재 문제는 AAA 실행 시 Gradle을 통해 실행되고 있고,
이 과정에서 IntelliJ가 생성하는 임시 init 스크립트가 최신 Gradle과 충돌하면서 에러가 발생하는 상황입니다.
반면 BlackjackExperimentApplication은 IntelliJ Application 방식으로 실행되어 문제가 발생하지 않습니다.
2️⃣ 충돌의 핵심 원인
프로젝트의 gradle-wrapper.properties 내용:
distributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
즉, Gradle 9.3.1을 사용 중입니다.
- Gradle 9.x에서는 과거 project.convention 접근 방식이 제거/변경됨
- IntelliJ가 생성한 실행용 스크립트가 해당 API에 접근하면서 충돌 발생
- 그 결과 Could not get unknown property 'convention' 오류 발생
즉,
🔥 최신 Gradle 버전과 IntelliJ 내부 실행 스크립트의 호환 문제
✅ 해결 방법
✔ 해결 방법 1 (가장 간단하고 권장)
실행을 Gradle이 아니라 IntelliJ로 변경 설정 경로
Settings
→ Build, Execution, Deployment
→ Build Tools
→ Gradle
변경
Build and run using → IntelliJ IDEA
Run tests using → IntelliJ IDEA
적용 후 다시 AAA.main() 실행
장점
- Gradle init 스크립트를 사용하지 않음
- 즉시 문제 해결
- 설정만 변경하면 끝
✔ 해결 방법 2 (Gradle 유지하고 싶을 경우)
Gradle Wrapper 버전 낮추기
gradle-wrapper.properties 파일 수정:
distributionUrl=https\\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
저장 후:
- Gradle 탭 → Reload
- 또는 프로젝트 재시작
또는 터미널에서:
./gradlew wrapper --gradle-version 8.14.3