我有一个“java模块”,其中包含一些jar文件(lib.jar)。它们使用fileTree方法包含在我的模块build.gradle文件中。
compile fileTree(dir: 'libs', include: ['*.jar'])
当我在主应用程序中包含“java模块”作为依赖项时,当模块尝试访问lib.jar中的类时,我总是得到ClassDefNotFoundException。
以下是项目层次结构:
|--mylibrary (java module)
|
--libs/
|
--lib.jar
--build.gradle
|--app
|
--src/
--libs/
--build.gradle
仅当模块是“java模块”时才会出现此问题。我已尝试使用“android库模块”作为依赖项,并且罐子包含在内。我错过了什么?
Java模块build.gradle:
apply plugin: 'java'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
App build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.macolighting.mncp.myapplication"
minSdkVersion 21
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'])
compile project(':mylibrary')
}
答案 0 :(得分:1)
如果有人想知道我是如何解决这个问题的,我不得不手动将jar依赖项提取到构建jar中。它非常适合hacky,但它确实有效。向谷歌提交了一个错误,希望他们能够解决问题。 https://code.google.com/p/android/issues/detail?id=186012
apply plugin: 'java'
configurations {
libDependency
}
jar {
from {
configurations.libDependency.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}
dependencies {
FileTree libs = fileTree(dir: 'libs', include: '*.jar')
libDependency libs
compile libs
}