Gradle Kotlin DSL에서 create import를 하면 안 되는 이유
Gradle Kotlin DSL에서 create import를 하면 안 되는 이유
문제 상황
Gradle Kotlin DSL로 커스텀 sourceSet을 추가하다 보면 IDE가 이런 제안을 하는 순간이 온다.
“create()에 import가 필요합니다”
그리고 IDE는 친절하게 다음과 같은 후보를 내민다.
kotlin.collections.createjava.util.create- 기타 전혀 관계없는
create
하지만 이 상황에서의 정답은 단 하나다.
👉 아무 것도 import 하면 안 된다
IDE가 잘못된 방향으로 유도하고 있는 것이다.
왜 import 추천이 뜨는가 (핵심 원인)
1
2
3
4
5
sourceSets {
create("testUnit") {
// ...
}
}
이 코드는 Gradle Kotlin DSL 문맥에서는 전혀 문제가 없다.
하지만 IDE는 이 코드를:
- Gradle DSL이 아닌
- 일반 Kotlin 코드로 오해한다
그 결과 create()를 다음과 같이 해석하려고 시도한다.
- Kotlin Collection 함수
- Java Utility 함수
그래서 전혀 관계없는 create import들을 추천하게 되는 것이다.
👉 이 추천들은 전부 잘못된 후보다.
결론부터 말하면
- IDE가 틀렸다
- Gradle DSL에서
create는 import 대상이 아니다 - import를 추가하면 오히려 DSL 맥락이 깨진다
✅ 올바른 해결 방법 (가장 확실한 방식)
🔹 1. create 대신 register 사용 (강력 추천)
Gradle Kotlin DSL에서 정석으로 권장되는 방식이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sourceSets {
val main by getting
register("testUnit") {
java.srcDir("src/testUnit/java")
resources.srcDir("src/testUnit/resources")
compileClasspath += main.output
runtimeClasspath += output + compileClasspath
}
register("testIntegration") {
java.srcDir("src/testIntegration/java")
resources.srcDir("src/testIntegration/resources")
resources.srcDir("src/test/resources")
compileClasspath += main.output
runtimeClasspath += output + compileClasspath
}
}
이렇게 하면:
- ❌
create관련 import 제안 사라짐 - ❌ 타입 추론 오류 사라짐
- ❌ IDE 경고 대부분 해결
register는 lazy configuration을 사용하기 때문에 Gradle 철학에도 더 잘 맞는다.
🔹 2. 정말 create를 쓰고 싶다면 (비추천)
가능은 하지만 조건이 있다.
- 절대 import를 추가하지 말 것
- 반드시
val main by getting을 사용할 것
1
2
3
4
5
6
7
8
9
sourceSets {
val main by getting
create("testUnit") {
java.srcDir("src/testUnit/java")
resources.srcDir("src/testUnit/resources")
compileClasspath += main.output
}
}
그래도 IDE는 계속 경고를 띄울 가능성이 높다.
❌ 절대 하면 안 되는 것
다음 중 하나라도 하면 Gradle DSL 문맥이 완전히 깨진다.
- IDE가 추천하는
createimport 추가 ❌ import kotlin.collections.create❌import org.gradle.api.create❌
이 순간부터 DSL이 아니라 일반 Kotlin 코드로 인식된다.
한 줄 요약
Gradle Kotlin DSL에서
create는 import 대상이 아니다.IDE가 헷갈린 것이고,
register로 바꾸는 게 가장 깔끔한 해결책이다.
이 문제를 만났다면 IDE를 믿지 말고 Gradle DSL 문맥을 믿자.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.