Я пытаюсь создать библиотеку android, moduleD, которая зависит от другого библиотечного модуля, который, в свою очередь, зависит от двух библиотечных модулей. Вроде бы все работает нормально, но я получаю ClassNotFoundException
, когда пытаюсь использовать библиотеку в приложении.
Настраивать
MyLibrary/
+-- moduleA
+-- src/main/java/
+-- com/example/a
+-- moduleB
+-- src/main/java/
+-- com/example/b
+-- moduleC
+-- src/main/java/
+-- com/example/b
+-- com/example/c
`-- MyMissingClass.java <-- MISSING
+-- moduleD
+-- src/main/java/
+-- com/example/b
build.gradle (модуль C)
dependencies {
compile project(':moduleA')
compile project(':moduleB')
}
build.gradle (модуль D)
dependencies {
compile project(':moduleC')
}
В моем приложении я вызываю ModuleD, который вызывает Module
Для полноты картины я ссылаюсь на полученные aars локально, но я не думаю, что проблема в этом. Разархивируя class.jar в moduleD, я вижу файлы классов moduleD, но не MyMissingClass.
build.gradle (в отдельном проекте приложения)
repositories {
...
flatDir {
dirs 'libs'
}
}
dependencies {
compile(name:'moduleB', ext:'aar')
}
не-решение
Транзитивная зависимость[1][2]
[1]: Как включить зависимости в проект Gradle библиотеки Android? [2]: Как отправить библиотеку Android (aar) с удаленными зависимостями (gradle)?
build.gradle (приложение)
dependencies {
compile(name:'moduleD', ext:'aar') {
transitive true
}
}
Это может работать для внешних зависимостей (например, доступных через maven, центральных или локальных), и имеет смысл избегать связывания внешних зависимостей, которые в противном случае можно было бы обновить/понизить независимо друг от друга, чтобы избежать конфликтов или получить исправления. Однако модули A-C являются внутренними для проекта и на данный момент используются только в этой одной библиотеке.
Вопрос
Можно ли создать aar (или jar) для moduleD, который содержит все классы и может фактически использоваться в приложении, учитывая, что проект библиотеки разбит на отдельные модули?