【发布时间】:2016-01-31 10:14:45
【问题描述】:
总结:
我有一个依赖于 JAR 文件的 AAR 文件,当我构建 AAR 项目时,它不包含 JAR 代码。
详情:
我有一个 Java SDK 库项目,其中包含我们用于 Java Web 项目等的代码,该库是使用 Gradle 创建的,并驻留在内部的 nexus 服务器中(作为 JAR)。
目标是通过多个 Android 应用程序可以使用的 AAR 库提供此 JAR 库的“Android 配置”版本,并最大限度地减少实现它的工作量(和样板代码)。此 AAR 文件也会上传到 nexus 服务器以供 Android 应用程序项目使用。
我的 AAR 项目包含我的 Java SDK 库(JAR)的 gradle 依赖项,但在构建时,AAR 不包含其中的任何类。
代码:
这是 Java SDK 项目的 gradle 文件:
apply plugin: 'java'
//noinspection GroovyUnusedAssignment
sourceCompatibility = 1.7
version = '1.1.1'
repositories {
mavenCentral()
}
jar {
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
testCompile 'org.apache.directory.studio:org.apache.commons.io:2.4'
compile 'org.springframework:spring-web:3.1.1.RELEASE'
compile 'com.google.code.gson:gson:2.3'
}
这是我的 AAR 项目的 gradle 文件,请注意,我从中删除了 Maven 存储库声明到我的 nexus 服务器。为了这个问题,我想这应该无关紧要。
apply plugin: 'com.android.library'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "2.2.2"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.0'
compile ('com.mycompany:javasdk:1.1.1')
}
这是我的 Android 项目的 gradle 文件,我再次删除了 nexus 服务器引用:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.mycompany.application1"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.0'
compile ('com.mycompany:androidsdk:2.2.2@aar')
}
注意:我最初通过在 AAR 项目的 lib 目录中添加 JAR 解决了这个问题,但这是不希望的。它使得拥有一个 Nexus 服务器毫无用处。最好我们可以在 AAR 项目的 gradle 文件中增加 JAR 的版本号,然后在编译时自动更新。
NOTE2: 我尝试将transitive=true 添加到我在 Android 项目中的 AAR 依赖项中,但没有解决任何问题,真正的问题是在构建 AAR 项目时,JAR 项目代码没有不要捆绑。
【问题讨论】:
标签: java android gradle jar aar