Вы пытались определить новые задачи, расширяющие тип задачи ShadowJar
?
Примерно так:
tasks.create<ShadowJar>("internal") {
isZip64 = true
archiveFileName.set("internal.jar")
mergeServiceFiles()
manifest {
attributes(mapOf("Main-Class" to "com.foo.InternalApplication"))
}
minimize()
}
tasks.create<ShadowJar>("external") {
isZip64 = true
archiveFileName.set("external.jar")
mergeServiceFiles()
manifest {
attributes(mapOf("Main-Class" to "com.foo.ExternalApplication"))
}
minimize()
}
Задача сборки уже должна существовать. Поэтому мы не хотим определять новую задачу с конфликтующим именем, поэтому давайте вместо этого сконфигурируем существующую задачу build
для добавления новых зависимостей, чтобы при каждой сборке происходило сотрясение.
tasks.build {
dependsOn("internal")
dependsOn("external")
}
Если вместо этого вы не хотите создавать jar-файлы каждый раз, когда ваш проект собирается (это будет много), вы можете вместо этого определить задачу, которая будет вызываться явным образом для jar обоих.
tasks.create<Exec>("buildJars") {
dependsOn("internal")
dependsOn("external")
}
Я не на компьютер, на котором я могу проверить это, поэтому я делаю довольно много предположений на основе ваших оригинальных фрагментов кода. Однако этот подход является стандартным и правильным способом создания новых задач и определения их типа.
Подробнее об этом можно прочитать здесь, на официальных документах . Все фрагменты кода имеют вкладку для переключения между Groovy и Kotlin.