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

Gradle shadow插件包也都“提供”了依赖项,这不应该是这样的

闾丘书
2023-03-14

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

    null
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
}

编辑1:这似乎也不起作用,暂时的依赖项仍然被复制到fat jar中。

shadowJar {
    dependencies {
        exclude(project(':rangeCache'))
    }
}

编辑2:基于斯坦尼斯拉夫的回答,我做了以下工作,使事情正常运行:

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

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

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

希望能有所帮助。

 类似资料:
  • 我想要一个胖罐子,但是没有提供的依赖项。因此,我使用以下两个插件: https://github.com/johnrengelman/shadow 还有一个身材。如下所示的渐变文件: 但是,当我运行时,我的胖罐子中仍然有所有的rangeCache类。如何从我的胖罐子中排除提供的依赖项? 编辑1:这似乎也不起作用,暂时的依赖仍然被复制到胖罐子里。 编辑2:根据Stanislav的回答,我做了以下工作

  • 我有这样的build.gradle文件: 并且构建任务成功执行: 而在C:\ Users \ admin . gradle \ caches \ modules-2 \ files-2.1 \ javax . persistence \ persistence-API \ 1 . 0 . 2 \ 8中...一个Gradle下载了archive persistence-API-1 . 0 . 2 .

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

  • 我有一个J2ee项目,它使用了诸如Jsf、EJB、持久性API等技术。但是我怎么知道这些模块需要的wich版本。例如: 现在,我在maven中央存储库中查找这些信息:GroupId、ArtifactID和最新版本。但有一个更简单的方法做到这一点?

  • 我正在尝试编译几个WAR文件,所有这些都依赖于一个公共的JAR模块。然而,在我的Gradle构建中,我似乎无法获得类似于“提供”的依赖关系来使用Java插件。 然而,最后这一位将生成具有适当依赖关系的变量newRuntime,然而,当我试图将该变量重新分配回运行时配置时,它抛出一个“无法找到属性异常”。 我在Gradle的bug跟踪中发现了很多关于这个问题的讨论:Gradle-784 然而,这方面

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