Как исключить файлы kotlin из компиляции с помощью gradle
С Java мы исключаем вот так:
java {
srcDir 'src'
exclude '**/myTests/**'
}
Я хочу сделать то же самое с Kotlin. Попытка найти некоторые документы по этому вопросу в официальной документации по настройке kotlin безуспешно. Что я ожидал и уже попробовал (и, конечно, безуспешно):
kotlin {
srcDir 'src'
exclude '**/myTests/*.kt'
}
4 ответа
java {
srcDir 'src'
exclude '**/myTests/*.kt'
}
Конфигурация, связанная с Kotlin, отсутствует.
Почему я говорю это, у меня есть все файлы kotlin в каталог kotlin и файлы java в каталог java. Но при настройке я поставил
sourceSets {
main.java.srcDirs += "src/main/kotlin"
}
это означает, что с src/main/java
добавить исходные файлы из src/main/kotlin
также во время компиляции.
Это должно решить вашу проблему.
Android (вероятно, нуждается в улучшении, кажется нестабильным):
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile.class).configureEach {
it.exclude('**/TestExcludeKotlinClass.kt')
}
Если вы используете проект Kotlin Gradle, попробуйте следующее:
tasks.withType<KotlinCompile> {
exclude("**/packageToExlude/**")}
В моем случае проект не для Android.
Нашел способ сделать эту работу специально для модульных тестов Android (но я предполагаю, что это можно адаптировать), используя комбинацию других решений здесь:
def filesToExclude = [
'**/*TestOne*.kt',
'**/*TestTwo*.kt',
...
]
tasks.withType(org.gradle.api.tasks.SourceTask.class).configureEach {
it.exclude(filesToExclude)
}
android.sourceSets.test.kotlin.exclude(filesToExclude)
В моем конкретном случае дополнительные символы подстановки вокруг имени теста были необходимы из-за возникновения другого поколения (в частности, Dagger с kapt).
Это кажется немного хакерским подходом, но он работает, гарантируя, что тестовая цель исключена из всех задач, из которых она действительно может быть исключена (включая задачи сборки и kapt). Исключение sourceSets по-прежнему необходимо, чтобы файл не собирался для компиляции (я думаю, что это делает плагин Kotlin Gradle, но это также может быть плагин Android Gradle).