Android アプリのビルド時に 『Module version XXX depends on libraries but is not a library itself』 というエラーが発生することがある
Android Gradle プラグイン を使って、Gradle で Android アプリのビルドをするときの話。
Maven リポジトリで公開されている AAR パッケージを依存関係に含めてビルドしようとすると、次のようなエラーが発生することがある。 エラーメッセージを見てもいまいち何が悪いのかわからない。
* What went wrong: A problem occurred configuring root project 'android-sample-project'. > Module version com.eyeem.zeppelin:library:0.9.0 depends on libraries but is not a library itself
ちなみに上のエラーが発生するときの build.gradle の一部は次のような感じ。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.8.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
dependencies {
compile fileTree(dir: 'lib', include: '*.jar')
compile 'com.eyeem.zeppelin:library:0.9.0'
}
(略)
同じエラーが出るということで、質問サイトなどに同様の質問があったが特に解決してない様子だった。
- Gradle for Android AAR Depending Upon AAR, Both In The Same Remote Repository? - Stack Overflow
- Module "depends on libraries but is not a library itself" (Google グループ)
この記事の例では com.eyeem.zeppelin:library:0.9.0 が問題となっているわけだけど、その pom ファイルを見ると次のようになっている。
packaging 要素の中身を見ると、本来は aar であるべきなのに aar.asc となっていて、怪しい感じ。 。 というわけで 「aar.asc」 について調べてみると次のページがひっかかった。
ライブラリ作者の build.gradle が悪くて POM がおかしくなってるというのが原因っぽい。 build.gradle に
configurations {
archives {
extendsFrom configurations.default
}
}
と書くのはやめましょう、という感じ。 上の記述については、Maven Central への AAR パッケージの公開方法を説明している次のページなどに記述されているので、そのまま真似してしまう開発者がいるんだろうなー。
というわけで、Maven Central で公開されてるライブラリの POM がおかしい場合もあるという話でした。