Я пытаюсь включить один исходный файл для Main-Class
банки - на самом деле у меня есть каталог таких файлов верхнего уровня, demo/
, но я не хочу, чтобы они все были в банке. Мне нужны отдельные банки, каждая из которых использует только один из них.
Это похоже на своего рода анти-шаблон в gradle, поскольку основной механизм предполагает или предпочитает, чтобы я вместо этого помещал каждый в отдельный sourceSet
. Ух.
Случайное чтение документов подразумевает Jar.from()
, может быть полезно следующим образом: «Указывает исходные файлы или каталоги ...»
Как выясняется, «источник», возможно, употребляется неправильно. Вот пример, типичная kotlin толстая банка с добавленными from("demo/LockingBufferDemo.kt")
:
val jar by tasks.getting(Jar::class) {
manifest { attributes["Main-Class"] = "LockingBufferDemoKt" }
from(sourceSets.main.get().output)
from("demo/LockingBufferDemo.kt")
dependsOn(configurations.runtimeClasspath)
from({
configurations.runtimeClasspath.get().filter {
it.name.endsWith("jar") }.map { zipTree(it) }
})
}
Простите мою наивность: Угадайте, что не попадает в банку? LockingBufferDemo.class
. Угадайте, что делает? LockingBufferDemo.kt
. Другими словами, это больше похоже на ресурс , а не источник , и самый простой ответ - это тупик.
Другой способ приблизиться к этому - добавить каталог demo
как независимый sourceSet
, а затем использовать from(sourceSets["demo"].get()
, за исключением того, что я не могу найти способ завершить это; согласно IntelliJ get()
возвращает довольно непрозрачный «Provider» , который я не могу найти в фактическом javado c: 1 , 2 и Я действительно чувствую, что в этот момент я иду по садовой дорожке, и лес вокруг меня быстро темнеет.
Это не должно быть так сложно.
Как я могу добавить один файл (или производный от него класс) в банку в gradle, не помещая его отдельно в каталог и создавая sourceSet
для каждого такого каталога?