编辑:这个项目演示了行为:
https://github.com/NathanielWaggoner/AndroidExamples/tree/master/packing
有一个解读我解释了你第一次构建它。
我有一组使用Gradle和AndroidStudio构建的项目。我们称他们为Lib1, SDK and APP
。 Lib1
和SDK
部署到我维护的私人Sonotype仓库中。
App
取决于SDK
- App是一个正常的Android项目
SDK
取决于Lib1
- SDK是重新打包为Jar的Android库项目
Lib1
取决于某些Android Stuff。 - Lib1
是一个普通的android库项目,打包为aar。
当我运行gradle dependencies
时,在每个项目中,我都会看到一些我不期待的事情。
在Lib1
中,我看到了所有适当的依赖关系,正如我所期望的那样(包括依赖关系的依赖关系)
在SDK
中,除了Lib1之外,我看到了所有相关的依赖关系及其树。在lib1的情况下,我唯一看到的是lib1,而不是它的任何依赖。
在APP
中,我看到SDK
依赖项非常类似的东西 - 我看到所有依赖项都是它们的树,除了SDK
。在SDK
的情况下,我只看到SDK
。我没有看到Lib1被列为依赖项(或SDK
的任何其他依赖项)。
一切都很好 - 我可以编译和部署Lib1
,并编译和部署SDK
。我可以编译APP
- 但是当它使用引用SDK
的{{1}}代码时,我会在Lib1
类上获得noClassDefFound。
检查输出jar在Lib1
或SDK
的构建阶段创建的JAR中没有包含任何库类,并且创建的poms不引用任何依赖项(来自installArchives) / uploadArchives任务)。
我该如何解决这个问题?我不希望Lib1
的消费者必须直接在Lib1中编译才能找到这些类。
答案 0 :(得分:1)
本主题:
http://forums.gradle.org/gradle/topics/using_the_maven_publish_plugin_no_dependencies_in_pom_xml
显示了一些非常类似于我发现的行为 - 我的poms是在没有包含依赖信息的情况下生成的。
现在我已经在我的installArchives中解决了这个问题。
task installArchives(type: Upload) {
repositories.mavenInstaller {
configuration = configurations.archives
//configuration = configurations.default
pom.version = "0.0.1-SNAPSHOT"
pom.artifactId = "lib2"
pom.groupId = "waggoner.android.examples"
pom.withXml {
def node = asNode().appendNode('dependencies').appendNode('dependency')
node.appendNode('groupId','waggoner.android.examples')
node.appendNode('artifactId','lib1')
node.appendNode('version','0.0.1-SNAPSHOT')
}
}
}