Support for Gradle plugin variants

그레이들 7.0은 그레이들 플러그인 작성자를 위해 새로운 기능인 플러그인 변수(plugins with variant)를 도입했다. 이 기능을 사용하면 이전 그레이들 버전과의 호환성을 유지하면서 최신 그레이들 기능에 대한 지원을 더 쉽게 추가할 수 있다.

그레이들의 변수 선택(variant selection)에 대해 자세히 알아보자.

그레이들 플러그인 변수(variant)를 통해 코틀린 팀은 다양한 그레이들 버전에 대해 다양한 코틀린 그레이들 플러그인(KGP) 변수를 제공할 수 있다. 목표는 지원되는 가장 오래된 그레이들 버전에 해당하는 메인 변수에서, 기본 코틀린 컴파일을 지원하는 것이다. 각 변수에는 해당 릴리스의 그레이들 기능이 구현된다. 최신 변수는 최신 그레이들 기능을 지원한다. 이 접근 방식을 사용하면, 기능이 제한된 이전 그레이들 버전에 대한 지원을 확장할 수 있다.

현재 코틀린 그레이들 플러그인에는 다음과 같은 변수가 있다.

변수해당 그레이들 버전
main6.8.3–6.9.3
gradle707.0
gradle717.1-7.4
gradle757.5
gradle767.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:

다음은?

다음 내용을 학습해보자: