我正在尝试建立一个包含两个android库项目(aar)的新项目。我们称他们为foo
和bar
。
由于在撰写本文时这是全新的,我使用的是Android Studio 1.2.2,Android Build Tools 1.1,Gradle Wrapper 2.2.1。
foo
取决于bar
,为了让Gradle构建工作,我需要从以下来源指定依赖项:
dependencies {
compile project(':bar')
}
我需要至少将foo
发布到本地maven存储库,以便可以通过单独的应用程序项目baz
来获取它,这取决于foo
。 baz
位于一个完全独立的项目和Gradle构建中。
我通过使用maven
插件并将以下内容添加到foo
的build.gradle中来实现:
task uploadArchives(type: Upload) {
repositories.mavenInstaller {
configuration = configurations.getByName(Dependency.DEFAULT_CONFIGURATION)
pom.groupId = "com.example"
pom.artifactId = "foo"
pom.version = "0.0.2-SNAPSHOT"
}
}
并像往常一样在baz
版本中包含maven依赖项,如下所示:
dependencies {
compile 'com.example:foo:+'
}
现在我遇到的问题是baz
应用程序在运行时失败,因为它缺少bar
的依赖性! (ClassNotFoundException异常)。
检查发布到maven local的foo
aar
我可以看到它中没有任何bar
,bar
中也没有引用pom
} foo
。
如何让Gradle从上述信息中为foo
中的pom
添加适当的依赖关系信息?
我尝试通过将foo
指定为maven依赖项来替换bar
的构建:
dependencies {
compile 'com.example:bar:+'
}
但在这种情况下,bar
和foo
的Gradle构建都在配置阶段失败,因为当然在maven local上找不到bar
(它没有已经建成了!) - 记住它们都在一个多项目设置中。
解决这个问题的正确方法是什么? 对于像这样的多项目和Android库项目设置的良好实践是否有任何指针?
我也对maven
和maven-publishing
插件的存在感到困惑。什么是用于Android库设置的最合适的标准?
我很抱歉在一篇文章中包含多个问题,我希望当我清楚地了解正确的方向时,我可以编辑并使其成为一个更有帮助的问题/答案,可以帮助那些像我一样迷失的人。
谢谢!
答案 0 :(得分:2)
好吧,经过一场激烈的战斗,但仍然没有完全坚定的细节,我想我发现了一些问题。
从我收集的内容中,将bar
指定为foo
的源项目依赖项是正确的。理论上,如果所有内容都设置正确,maven插件应该能够在pom
文件中构建适当的依赖项。
我遇到的麻烦在于正确配置maven发布。
到目前为止,我能够得出的结论是,使用mavenInstaller
事情很容易,但pom
形成错误(缺少依赖关系)。另一方面,如果我使用mavenDeployer
,则会生成带有依赖项的pom
。它只花了我很长时间才能使它工作,因为如果没有正确设置它会失败,并且我不知道为什么会这样做。
对我有用并且希望可以帮助他人的一个组合就是:
afterEvaluate { project ->
uploadArchives {
repositories {
mavenDeployer {
repository(url: mavenLocal().url)
}
}
}
}
我希望这有助于其他失去的灵魂,并有助于在这个问题上更加明确