Support for Gradle plugin variants
그레이들 7.0은 그레이들 플러그인 작성자를 위해 새로운 기능인 플러그인 변수(plugins with variant)를 도입했다. 이 기능을 사용하면 이전 그레이들 버전과의 호환성을 유지하면서 최신 그레이들 기능에 대한 지원을 더 쉽게 추가할 수 있다.
그레이들의 변수 선택(variant selection)에 대해 자세히 알아보자.
그레이들 플러그인 변수(variant)를 통해 코틀린 팀은 다양한 그레이들 버전에 대해 다양한 코틀린 그레이들 플러그인(KGP) 변수를 제공할 수 있다. 목표는 지원되는 가장 오래된 그레이들 버전에 해당하는 메인 변수에서, 기본 코틀린 컴파일을 지원하는 것이다. 각 변수에는 해당 릴리스의 그레이들 기능이 구현된다. 최신 변수는 최신 그레이들 기능을 지원한다. 이 접근 방식을 사용하면, 기능이 제한된 이전 그레이들 버전에 대한 지원을 확장할 수 있다.
현재 코틀린 그레이들 플러그인에는 다음과 같은 변수가 있다.
변수 | 해당 그레이들 버전 |
---|---|
main | 6.8.3–6.9.3 |
gradle70 | 7.0 |
gradle71 | 7.1-7.4 |
gradle75 | 7.5 |
gradle76 | 7.6 이상 |
향후 코틀린 릴리스에서, 더 많은 변수가 추가될 것이다.
빌드에서 사용하는 변수를 확인하려면, --info
로그 레벨을 활성화하고 출력에서 Using Kotlin Gradle
플러그인으로 시작하는 문자열(예: Using Kotlin Gradle plugin main variant
)을 찾는다.
Troubleshooting
다음은 그레이들에서 변수 선택과 관련된 몇 가지 알려진 문제에 대한 해결 방법이다:
Gradle can’t select a KGP variant in a custom configuration
이는 그레이들이 커스텀 구성에서 KGP 변형을 선택할 수 없는 상황이다. 커스텀 그레이들 구성을 사용하는 경우:
코틀린
configurations.register("customConfiguration") {
// ...
}
그루비
configurations.register("customConfiguration") {
// ...
}
그리고 예시로, 코틀린 그레이들 플러그인에 대한 의존성을 추가하고 싶다:
코틀린
dependencies {
customConfiguration("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0")
}
그루비
dependencies {
customConfiguration 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0'
}
customConfiguration
에 다음 애트리뷰트를 추가해야 한다:
코틀린
configurations {
customConfiguration {
attributes {
attribute(
Usage.USAGE_ATTRIBUTE,
project.objects.named(Usage.class, Usage.JAVA_RUNTIME)
)
attribute(
Category.CATEGORY_ATTRIBUTE,
project.objects.named(Category.class, Category.LIBRARY)
)
// If you want to depend on a specific KGP variant:
attribute(
GradlePluginApiVersion.GRADLE_PLUGIN_API_VERSION_ATTRIBUTE,
project.objects.named("7.0")
)
}
}
}
그루비
configurations {
customConfiguration {
attributes {
attribute(
Usage.USAGE_ATTRIBUTE,
project.objects.named(Usage, Usage.JAVA_RUNTIME)
)
attribute(
Category.CATEGORY_ATTRIBUTE,
project.objects.named(Category, Category.LIBRARY)
)
// If you want to depend on a specific KGP variant:
attribute(
GradlePluginApiVersion.GRADLE_PLUGIN_API_VERSION_ATTRIBUTE,
project.objects.named('7.0')
)
}
}
}
그렇지 않으면, 다음과 유사한 오류가 발생한다:
> Could not resolve all files for configuration ':customConfiguration'.
> Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.0.
Required by:
project :
> Cannot choose between the following variants of org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.0:
- gradle70RuntimeElements
- runtimeElements
All of them match the consumer attributes:
- Variant 'gradle70RuntimeElements' capability org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.0:
- Unmatched attributes:
다음은?
다음 내용을 학습해보자: