所以,标题有点措辞不好,但我有这个项目结构:
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 找到了创可贴修复。