Зависимость проекта Gradle не имеет переходных зависимостей

#java #gradle

Вопрос:

Итак, название немного неудачно сформулировано, но у меня есть структура этого проекта:

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

Где A и B-оба подпроекта проекта.

Проблема в том, что при компиляции A (B компилируется нормально) B перекомпилируется и выводит jar без зависимостей (даже если запущен плагин shadowJar).

Сборка проектов (упрощенная). 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 (упрощенная) сборка.gradle:

 dependencies {
    implementation project(':B')
}
 

Сборка B (упрощенная). 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
 

И в выходной банке в папке build/libs проекта B нет ASM, если я не создаю только проект B.

Единственный другой вопрос, который я видел с этой проблемой, был для Android и использовал API вместо реализации (которая, я думаю, предназначена только для Android).

Итак, как я могу решить эту проблему и заставить Gradle распознавать (и затенять) ASM?

РЕДАКТИРОВАТЬ: После дальнейшего тестирования, похоже, он ломается только в том случае, если A вызывает метод B, зависящий от ASM.

A может импортировать класс из B, который импортирует Remapper без ошибок, проблема заключается только в том, что указанный класс расширяет Remapper. Я нашел решение проблемы с лейкопластырем, просто внедрив ASM в проект A.

Комментарии:

1. Все еще работая над этим, как у gradle IntelliJ, так и у CLI gradle есть одна и та же проблема. Я пытался добавить shadowJar в задачи по умолчанию (читал где-то еще, что эта задача используется в подпроектах), но безуспешно.

2. Вы получаете ошибку во время выполнения или во время компиляции?

3. Время компиляции, а не время выполнения

4. Затем попробуйте применить плагин java-библиотеки и измените implementation его на api для зависимости ASM. Это означает, что он будет доступен для проекта A во время компиляции (в противном случае он доступен только во время выполнения).