Я создаю плагин для наших методов выпуска.Одна из задач, которые мне нужны, должна собрать выходные данные distZip каждого подпроекта, от которых зависит эта задача, и упаковать их в один zip-файл с некоторыми статическими файлами.
Вот мой плагин (все остальные задачи и расширения для простоты удалены):
open class SemanticVersionPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.tasks.create("release", ReleaseTask::class.java) {
group = "releasing"
}
}
}
Вот моя задача:
open class ReleaseTask : Zip() {
// This fuction copies the content of the distZip output into this task
private fun addProjectResultToRelease(zip: Zip, projectPath: String) {
logger.quiet(" Adding $projectPath")
with(zip) {
val distTaskName = "$projectPath:distZip"
val task = project.tasks.findByPath(distTaskName) ?: throw GradleException("Task not found: $distTaskName")
task.outputs.files.filter { it.extension == "zip" }.forEach {
val srcZip = project.zipTree(it)
//includeEmptyDirs = false
from(srcZip) {
eachFile {
this.path = (this.path.replaceBefore(delimiter = "/", replacement = ""))
}
}
}
}
}
// Some default value overrides
init {
outputs.upToDateWhen { false }
destinationDir = File("_release")
baseName = project.name
}
@Suppress("unused")
@TaskAction
fun action() {
val ext = project.extensions["semanticVersion"] as SemanticVersionExtension
println(dependsOn.joinToString { it.toString() })
// Iterating through dependencies
dependsOn.forEach {
it as String
println("DEP: $it")
addProjectResultToRelease(this, it.substringBeforeLast(":"))
}
from(project.file("version.txt"))
super.copy()
}
}
В сценарии сборки, где я его использую:
tasks.withType<ReleaseTask> {
dependsOn(":core:distZip")
}
Первый вопрос: это init
заблокировать правильное место для установки или переопределения значений по умолчанию?
Когда я запускаю эту задачу, я получаю сообщение «NO-SOURCE»:
> ...
> Task :core:distZip UP-TO-DATE
> Task :release NO-SOURCE
Как я могу указать, что выходысоответствующие distZips являются входами этой задачи?