当前位置: 首页 > 知识库问答 >
问题:

Gradle shadow插件包还包含所有“提供的”依赖项,但不应如此

金珂
2023-03-14

我想要一个胖罐子,但是没有提供的依赖项。因此,我使用以下两个插件:

  • https://github.com/johnrengelman/shadow

还有一个身材。如下所示的渐变文件:

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
}

但是,当我运行gradle影Jar时,我的胖罐子中仍然有所有的rangeCache类。如何从我的胖罐子中排除提供的依赖项?

编辑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)
}

共有1个答案

程皓轩
2023-03-14

看看这篇关于排除影子jar依赖的文章。

简而言之,根据本文,仅仅通过shadowJar的依赖项排除某些依赖项并不足以排除它的可传递依赖项,正如您已经提到的那样。解决方法是修改运行时配置,从中排除一些依赖项,如:

configurations {    
    runtime.exclude %what you need to exclude%
}

我希望这能有所帮助。

 类似资料:
  • 目前,要为Pax考试设置配置,我发现需要包含所有依赖项。比如说 但是由于依赖于,这感觉像是重复的信息。Pax Exam是否可能在不明确添加的情况下发现需要?

  • 我正试图让maven下载所有的依赖项(编译、测试、插件等)。)这样我就可以避免让我们的dockerized构建浪费不必要的时间一遍又一遍地下载它们。 我们已经对maven build进行了dockerized,这样我们就可以从jenkins运行它,而无需在jenkins机器上安装大量构建特定的依赖项(Java、redis、maven依赖项等)。我们的构建依赖于增量docker构建,它只执行实际需要

  • 我想有一个胖罐子,但没有提供的依赖项。所以我使用了以下两个插件: null 编辑1:这似乎也不起作用,暂时的依赖项仍然被复制到fat jar中。 编辑2:基于斯坦尼斯拉夫的回答,我做了以下工作,使事情正常运行:

  • 问题内容: 我看到了类似的问题,但未找到可接受的答案。问题-我有一些小功能我自己的android库。我的库使用其他库-fe Hawk(无sql数据库)。我的图书馆gradle文件: 图书馆工作正常。如果我将它用作另一个项目中的项目-它也可以工作。但是当我生成文件(带有-> )并包含到单独的项目中时-失败。项目仅查看我的图书馆的班级。Hawk com.orhanobut.hawk软件包和off其他软

  • 问题内容: 我在Eclipse中有一个对我的工作区中的另一个Java项目有依赖性的对象。在内置的Tomcat服务器中运行Web项目时,我已将项目依赖项添加到 运行配置中 的类路径中。我想创建一个WAR,用于在外部服务器上部署Web项目。依赖性Java项目已添加到Eclipse中的 Java Build路径 ,但是当我导出WAR文件时,该库不包括在内。还可以在 Order and Export中 选

  • 我已经创建了一个构建。war文件的非常简单的Maven项目。Maven Version3.2.3,Java Version1.7.0_67。pom.xml文件就是这个要点。 如果我运行,那么项目构建良好。但是,如果首先下载所有具有和的依赖项,然后运行进行脱机构建,则会出现如下错误。 我从两种方式创建的。m2/repository文件夹不同,使用依赖插件创建的文件夹缺少许多文件,其中大多数与Plex