Есть много других вопросов, связанных с этим, но я не смог заставить что-либо работать здесь.
Я использую shadowjar в подмножестве моих подпроектов, чтобы создать дальнюю банку. Один из подпроектов создает две банки (другой основной класс). Я пытаюсь устранить шаблон в каждом подпроекте.
Я пробовал несколько вещей, но использование «extra» кажется самым каноническим подходом, который я когда-либо пробовал. Но это не работает.
В root у меня есть:
subprojects {
afterEvaluate {
val jarFiles by project.extra(listOf<String>())
val mainClasses by project.extra(listOf<String>())
if (jarFiles != null && jarFiles.isNotEmpty()) {
jarFiles.forEachIndexed { idx, jarName ->
tasks.create<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar>(jarName) {
isZip64 = true
archiveBaseName.set(jarName)
mergeServiceFiles()
manifest {
attributes(mapOf("Main-Class" to mainClasses!![idx]))
}
minimize()
}
tasks.build {
dependsOn(jarName)
}
}
}
}
А затем в подпроектах, которые я пробовал:
extra["jarFiles"] = listOf("myproject")
extra["mainClasses"] = listOf("com.foo.Application")
или
val jarFiles by extra(listOf("internal", "external"))
val mainClasses by extra(listOf("com.fooInternalApplication", "com.foo.ExternalApplication"))
Однако, его не уволят. Я близок или я должен использовать совершенно другой подход?