Вот моя текущая настройка в build.gradle. кц:
Код: Выделить всё
tasks.register("processTextFiles") {
from("src/main/text") // Input directory
into("build/processed-text") // Output directory
include("**/*.txt") // Only include text files
}
- Изменить эту задачу, чтобы выполнить преобразование содержимого файла (например, замену определенных строк в текстовых файлах).< /li>
Убедитесь, что задача запускается только при изменении входных файлов (добавочная сборка). - Определите правильные аннотации @Input и @Output (при необходимости) для убедитесь, что Gradle правильно отслеживает зависимости.
- Пользовательская задача для преобразования: я попытался создать пользовательскую задачу, используя Tasks.register("processTextFiles") { ... } и перебирать файлы вручную с помощью fileTree. Однако мне неясно, как правильно применять преобразования к содержимому файла в Kotlin DSL.
Код: Выделить всё
tasks.register("processTextFiles") {
val inputDir = file("src/main/text")
val outputDir = file("build/processed-text")
doLast {
inputDir.walk().forEach { file ->
if (file.extension == "txt") {
val content = file.readText()
val processedContent = content.replace("oldString", "newString")
File(outputDir, file.name).writeText(processedContent)
}
}
}
}
- Инкрементная сборка: я читал, что функция инкрементной сборки Gradle зависит от правильного использования @Input и @Output, но я не уверен, как правильно аннотировать эти свойства для моей пользовательской задачи. Я пробовал использовать inputs.dir(inputDir) и выходы.dir(outputDir), но задача по-прежнему выполняется при каждой сборке, даже если входные данные не изменились.
- Тип задачи: я также пытался расширить класс DefaultTask для создания полностью настраиваемой задачи, но столкнулся с проблемами с объявлениями свойств и доступом к файлам в действии задачи.
- Версия Gradle: 8.2
- Версия Kotlin: 1.8.10
- Плагин Android Gradle: 8.1. 0
Подробнее здесь: https://stackoverflow.com/questions/790 ... h-specific