Я использую shadowJar в Gradle для создания 2 банок.Один jar содержит только основные файлы, а другой - толстый jar, содержащий все java-файлы в папках src / main / java и src / main / generate.Но когда я запускаю этот jar-файл, я получаю NoClassDefFoundError для классов в src / main / generate.Как этого добиться?
Мой пример задания shadowJar показан ниже:
shadowJar {
dependsOn compileLib
from(sourceSets.generated.java.srcDirs[1])
from(sourceSets.main.java.srcDirs[1])
from { configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } }
}
task shadowJar2(type: Jar, dependsOn: shadowJar) {
baseName = project.name + '-all'
manifest {
attributes 'Implementation-Title': project.name,
'Implementation-Version': version,
'Main-Class': 'XYZ'
}
doFirst {
dependsOn compileLib
from sourceSets.generated.java.srcDirs[1] include '**/*.class'
from sourceSets.generated.java.srcDirs[0] include '**/*.class'
from sourceSets.main.java.srcDirs[1]
from sourceSets.logback.resources.srcDirs[0] include '**/logback.xml'
from {configurations.applibs.collect { it.isDirectory() ? it : zipTree(it) } }
from { configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } }
}
}
Я попробовал предложения в https://github.com/johnrengelman/shadow/issues/138, https://github.com/bodiam/epub-organizer/blob/master/epub-organizer-dropwizard/epub-organizer-dropwizard.gradle, https://objectpartners.com/2013/07/16/creating-self-contained-executable-jars-with-gradle-and-shadow/ и несколько других.Но я не могу решить это.Причина использования shadow jar заключается в том, что мой jar должен быть правильно упакован со всеми версиями внутренних зависимых библиотек.Любая помощь будет принята с благодарностью.