你试过
Shadow Plugin
比如:
shadowJar {
manifest {
attributes 'Implementation-Title': 'rpi-sense-hat-lib',
'Implementation-Version': version,
'Main-Class': 'io.github.lunarwatcher.pi.sensehat.Tests'
}
configurations = [project.configurations.compile, project.configurations.runtime]
}
编辑:
您也可以这样做(如对此的回答中所述
question
)以下内容:
configurations {
fatJar
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
testImplementation group: 'junit', name: 'junit', version: '4.12'
fatJar "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
}
task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'rpi-sense-hat-lib',
'Implementation-Version': version,
'Main-Class': 'io.github.lunarwatcher.pi.sensehat.Tests'
}
baseName = project.name
from {
configurations.fatJar.collect {
it.isDirectory() ? it : zipTree(it)
}
}
with jar
}
但是,您必须将所有实现依赖项重复为fatjar依赖项。对于您当前的项目来说,这是很好的,因为您只有一个依赖项,但对于任何更大的项目来说,这将成为一个烂摊子…
编辑2:
正如@zoe在评论中指出的,这也是一个可以接受的解决方案:
task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'rpi-sense-hat-lib',
'Implementation-Version': version,
'Main-Class': 'io.github.lunarwatcher.pi.sensehat.Tests'
}
baseName = project.name
from {
configurations.runtimeClasspath.collect {
it.isDirectory() ? it : zipTree(it)
}
}
with jar
}
但是,根据
source code
那个
runtimeClasspath
是
runtimeOnly
我是说,
runtime
和
implementation
,可能需要,也可能不需要,具体取决于具体情况-例如,您可能不希望包括
运行时
依赖项,因为它们是由容器提供的。