Gradle shadow插件包也都是;“提供”;不应该是这种情况的依赖关系
我想要一个胖罐子,但是没有提供的依赖项。因此,我使用以下两个插件:Gradle shadow插件包也都是;“提供”;不应该是这种情况的依赖关系,gradle,Gradle,我想要一个胖罐子,但是没有提供的依赖项。因此,我使用以下两个插件: 并有一个build.gradle文件,如下所示: apply plugin: 'nebula.provided-base' apply plugin: 'com.github.johnrengelman.shadow' archivesBaseName = 'range-cache-drivers' group = 'com.engine' version = '0.302-SNAPSHOT' buildDir =
apply plugin: 'nebula.provided-base'
apply plugin: 'com.github.johnrengelman.shadow'
archivesBaseName = 'range-cache-drivers'
group = 'com.engine'
version = '0.302-SNAPSHOT'
buildDir = 'target'
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
provided project(':rangeCache')
// CSV, TSV, Fixe width
compile deps.univocityParsers
// MongoDB
compile deps.mongo
// Cassandra
compile deps.cassandradx
compile deps.cassandraSnappy
compile deps.cassandraLZ4
}
但是当我运行gradleshadowjar
时,我的胖jar中仍然有所有的rangeCache类。如何从fat jar中排除提供的依赖项
编辑1:
这似乎也不起作用,暂时的依赖项仍然被复制到胖罐子中
shadowJar {
dependencies {
exclude(project(':rangeCache'))
}
}
编辑2:根据Stanislav的回答,我做了以下工作以使事情正常工作:
configurations {
shadow
compile.extendsFrom provided
provided.extendsFrom shadow
}
dependencies {
provided project(':rangeCache')
// CSV, TSV, Fixe width
shadow deps.univocityParsers
// MongoDB
shadow deps.mongo
// Cassandra
shadow deps.cassandradx
shadow deps.cassandraSnappy
shadow deps.cassandraLZ4
testCompile deps.junit
}
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
task fatJar(type: ShadowJar) {
configurations = [project.configurations.shadow]
from(project.sourceSets.main.output)
}
看一看关于排除影子jar依赖项的内容
简而言之,根据本文,仅仅通过shadowJar
的依赖项排除某些依赖项不足以排除它的可传递依赖项,正如您已经提到的那样。解决方法是修改运行时配置,从中排除一些依赖项,如:
configurations {
runtime.exclude %what you need to exclude%
}
希望能有所帮助。这不适用于项目。然而,我在链接的博客文章中选择了第3个解决方案,它运行得非常好