Gradle 项目依赖没有传递依赖

时间:2021-03-07 01:15:54

标签: java gradle

所以,标题有点措辞不好,但我有这个项目结构:

Project
+- A
   +- B
      +- org.ow2.asm:asm-commons:9.1

其中 A 和 B 都是 Project 的子项目。

问题是,在编译 A 时(B 编译正常),B 被重新编译并输出一个没有依赖项的 jar(即使运行了 shadowJar 插件)。

项目的(简化)build.gradle:

plugins {
    id 'java'
    id 'com.github.johnrengelman.shadow' version '6.1.0'
}

allprojects {
    apply plugin: 'java'
    apply plugin: 'com.github.johnrengelman.shadow'

    compileJava.finalizedBy(shadowJar)

    shadowJar {
        archiveClassifier.set('')
    }
}

A 的(简化的)build.gradle:

dependencies {
    implementation project(':B')
}

B 的(简化版)build.gradle:

dependencies {
    implementation 'org.ow2.asm:asm-commons:7.3.1'
}

所以,输出显示 shadowJar 已运行,但仍然给我这个错误:

error: cannot access Remapper 
class file for org.objectweb.asm.commons.Remapper not found

项目 B 的 build/libs 文件夹中的输出 jar 中没有 ASM,除非我只构建项目 B。

我在这个问题上看到的唯一另一个问题是针对 Android 并使用 API 而不是实现(我认为仅适用于 Android)。

那么,我该如何解决这个问题并让 Gradle 识别(和遮蔽)ASM?

编辑: 经过进一步测试,它似乎只有在 A 调用 B 依赖于 ASM 的方法时才会中断。

A 可以从 B 导入一个导入 Remapper 的类,没有错误,问题仅在于该类扩展了 Remapper。 我通过在项目 A 中实现 ASM 找到了创可贴修复。

0 个答案:

没有答案