我正在开展一个包含两个Android库项目的项目。当我将这些库上传到我的Maven仓库(Nexus)时,生成的pom在依赖项中不包含<type>aar</type>
元素。
这是我的依赖树
* App1
\
* lib1
|\
| * lib2
* Other libs
您可以在此图表中看到我的app
取决于lib1
,这取决于lib2
。这两个库都是Android库项目,因此是AAR。
LIB1 /的build.gradle
apply plugin: 'com.android.library'
apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion 20
versionCode 1
versionName "1.0"
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
provided project(':lib2')
compile 'com.squareup.picasso:picasso:2.3.3'
}
LIB2 /的build.gradle
apply plugin: 'com.android.library'
apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion 19
versionCode 1
versionName '1.0'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:19.+'
compile 'com.squareup.retrofit:retrofit:1.6.1'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0'
compile 'com.squareup.okhttp:okhttp:2.0.0'
}
请注意Lib1
如何将Lib2
包含为project()
依赖项。
现在,当我使用Chris Banes&#39;优秀的gradle-mvn-push插件,一切都按预期工作。在生成的pom.xml中我注意到只有一个奇怪的地方。
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>lib2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
...
</dependencies>
请注意,mavenDeployer插件在生成pom时遗漏了依赖项中的<type>aar</type>
元素。
在我的app项目(这是一个maven项目)中,我列出了这个依赖项:
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>lib1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>aar</type>
</dependency>
...
</dependencies>
尝试使用Maven构建时,我收到以下错误。
Could not resolve dependencies for project com.example:app:apk:1.0.0-SNAPSHOT: The following artifacts could not be resolved: com.example:lib2:jar:0.0.1-SNAPSHOT
请注意它是如何寻找库的jar版本的。我相信,由于mavenDeployer插件没有在生成的pom的依赖列表中生成<type>aar</type>
,因此maven默认为查找jar。
有没有人知道如何使用Gradle构建包含瞬态依赖关系的Android库项目?
答案 0 :(得分:0)
只需使用任何文本编辑器将aar添加到pom即可。之后,打开一个控制台进入项目的根目录(pom所在的位置)并运行&#34; mvn clean install&#34;。将生成aar工件并将其部署到您的maven仓库。
无论如何,使用Maven创建aar库要容易得多。只需使用任何Android库原型创建一个Maven项目(de.akquinet非常好,但你必须使用3.8.2和3.9之间的插件版本,http://mvnrepository.com/artifact/de.akquinet.android.archetypes)。只需创建项目,添加库然后运行命令&#34; mvn clean install&#34;将它们安装到本地maven目录中。之后,只需将它们用作普通的aar依赖项。
答案 1 :(得分:0)
尝试gradle-fury。它修复了所有这些...呃...东西。特别是由gradle生成的无效和/或不准确的pom。确认工作解决方案发布到sonatype oss / maven中心。没有手动pom编辑,pgp签名支持等等。
网站:https://github.com/gradle-fury/gradle-fury
具体来说,您需要maven-support gradle脚本,它可以为您完成所有工作。通常在pom中的所有内容都存储在gradle.properties中。支持android变种,war文件,(很快修复distZip),javadocs和源jar等等。
免责声明,我正在努力
编辑:再多一点信息。尽管愤怒确实为AAR库注入了依赖关系和正确的输入,但gradle-android插件(谷歌制作的东西)并不尊重依赖部分并忽略它。基本上,AAR项目的传递依赖性是不受支持的。不知道为什么