Должен ли я скрывать Kotlin при написании плагина Gradle - PullRequest
3 голосов
/ 15 мая 2019

Я пишу плагин для извлечения некоторого шаблона из набора существующих скриптов сборки Gradle.Существующие сценарии сборки в основном написаны на Groovy и компилируются на Java.

Для сборки своего плагина я использую Gradle Kotlin DSL и решил, что воспользуюсь возможностью написать и плагин на Kotlin.Это все работает, но теперь мой плагин имеет огромную зависимость от Kotlin - и в документации Gradle особенно рекомендуются минимизация внешних библиотек .

Плагины Java и Groovy избегают этого, потому что Java & Groovy являются общей зависимостьюс Gradle, но Kotlin не является общим предварительным требованием, и поэтому мы должны быть обеспокоены потенциально конфликтующими версиями Kotlin, необходимыми для различных плагинов.

Я думаю, что мне следует двигаться вперед с одним из следующих подходов, ноНе ясно, какие:

  1. Просто перечислите stdlib Котлина как стандартную зависимость и доверяйте Gradle, чтобы разобраться.

    Это работает для одного плагина, но я долженожидать проблем, когда другой плагин также используется, но зависит от другого Kotlin?

  2. Создать какие-то библиотеки Uber shadowJar shadowing Kotlin для моего плагина

    Подразумевается, что каждый плагинЯ пишу так, что это будет на 10 с больше, чем нужно.

  3. Givep на плагинах, основанных на Kotlin, и перезапись на Java / Groovy

    Было бы стыдно расстаться с новым совершенством, но, возможно, было бы лучше избежать вышеуказанных грехов.

Рекомендации приветствуются!

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Поскольку ваш плагин заменяет шаблон и предположительно не предназначен для публичного выпуска, имеет ли смысл записать его как скрипт-плагин в Gradle Kotlin DSL?Таким образом, достаточно новый Gradle должен понимать его по-своему.

0 голосов
/ 16 мая 2019

Возникло это в Gradle Community Slack , и было рекомендовано использовать плагин Gradle kotlin-dsl для автоматической настройки зависимостей на gradleApi() и embeddedKotlin() версиях и, следовательно, независимо от того, какая версия Kotlin связана с Gradle's Kotlin DSL поддержка.

Я был обеспокоен тем, что это может привести к зависимости от вызывающего скрипта с использованием Kotlin DSL, но я протестировал скрипт Groovy и смог использовать мой плагин. Я предполагаю, что он все еще зависит от версии Gradle с поддержкой Kotlin DSL - то есть 4.0 +.

...