Я считаю, что транзитивные зависимости моей библиотеки не отображаются в приложении, особенно когда в моей библиотеке используется maven BoM.
Когда нет BoM, в приложении появляются транзитивные зависимости. Вот иллюстрация случая, когда сторонняя библиотека правильно отображается как зависимость времени выполнения в my-app.
[my-app] --> [my-lib] --> [3rd-party-lib]
Но когда я использую BoM в своей библиотеке (показано ниже), она не отображается в зависимости от времени выполнения в моем приложении. Это вызывает cra sh во время выполнения!
[my-app] --> [my-lib] --> [bom] --> [3rd-party-lib]
Вот код, с которым эта проблема воспроизводима:
// bom/build.gradle
plugins {
id 'java-platform'
id 'maven-publish'
}
publishing {
publications {
bom(MavenPublication) {
from components.javaPlatform
}
}
}
group "com.example"
version "0.0.3"
dependencies {
constraints {
api "com.jakewharton.timber:timber:4.7.1" // 3rd-party-lib
}
}
// mylibrary/build.gradle
apply plugin: 'com.android.library'
<<removed stuff for brevity>>
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
api platform("com.example:bom:0.0.3")
api "com.jakewharton.timber:timber"
}
// This helps to publish this library to maven local.
apply from: "https://raw.githubusercontent.com/sky-uk/gradle-maven-plugin/1.0.4/gradle-mavenizer.gradle"
// myapp/build.gradle
apply plugin: 'com.android.application'
<<removed stuff for brevity>>
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation "com.example:mylibrary:1.0.0"
}
В этом случае древесина сторонняя библиотека Как уже упоминалось, это не отображается в приложении, когда mylibrary использует BoM. В результате происходит сбой приложения при каждом вызове приложением mylibrary-кода, для которого внутренне требуется древесина.
Как обеспечить, чтобы mylibrary вносил в приложение переходные зависимости?
PS: я публикую sh в mylibrary для местный житель.