После глубокого исследования этих тем, долгих часов чтения и множества чайных и кофейных чашек, я обнаружил, что настройка моего проекта была не совсем правильной, а также я выяснил, что плагин Kotlin android имеет свои собственный печальный и темный факт, который, я надеюсь, я смогу прояснить в этом самом ответе, так что возьмите чашку чая / кофе и наслаждайтесь чтением.
- Есть ли способ запустить компиляцию kotlin дважды? Короткий ответ на это: NO! , это просто связано с тем, что
gradle
сам имеет график зависимостей Acycli c, что означает, что не должно быть возможности иметь a круговая зависимость, следовательно, задача будет запускаться только один раз при вызове gradle
. - Как решить это ограничение? Есть два варианта: либо мы добавляем новый
Source set
(для android, который будет через добавление нового buildType
), либо просто разрушаем чудеса дилеммы курица / яйцо и используем артефакты.
Я много экспериментировал со всеми возможными решениями, но все же что-то пахло рыбой. Первым делом, здесь - это ветка, в которой я спросил gradle
пользователей о моей проблеме. Несмотря на то, что это не решило мою проблему, оно все же пролило свет на корни самой проблемы, Дилемма курицы / яйца .
Пытаясь прояснить мою проблему, я продолжил свои исследования и спросил у kotlin
разработчиков, как это сделать с помощью kotlin плагина gradle. Пожалуйста, найдите ответы здесь
Краткая история: Невозможно напрямую расширить задачу kotlinCompile gradle просто потому, что есть «код вокруг», который инициирует компиляцию . Я имею в виду, конечно, но почему это было так плохо спроектировано? Почему такому красивому языку, как kotlin
пришлось ру sh при создании этого специфического c предположительно мощного плагина, и, главным образом, почему его исходные коды с тех пор никогда не обновлялись и не пересматривались?
Чтобы решить эту проблему, используйте их дескриптор KotlinCompilation точку входа. Мне лично не нравится это решение, так как оно ограничивает уровень гибкости, а также еще больше абстрагирует задачу компиляции.
Еще одним многообещающим способом использования gradle был artifacts
, когда модуль создает сам себя и создает артефакт. (в нашем случае обычно jar), который будет использоваться другими проектами. Звучит круто, правда? К сожалению, нет возможности добавить эту библиотеку в путь к классам consumers
, и компиляция просто не удастся.
Это были мои выводы, пожалуйста, не стесняйтесь обновлять мои знания или исправлять меня, если я ошибочно понимаю что-то.
Удачного кодирования!