在我的Android应用程序中,我正在获取一个java.lang.NoClassDefFoundError引用依赖.jar中的代码的代码.我的项目包括一个Android模块以及一个只有java的库模块,这是jar依赖的地方.我正在使用gradle 1.10来构建项目.这是我的项目布局:
myProject
- app (Android)
- src
- build.gradle
- lib (java)
- src
- libs
- local-dependency.jar
- build.gradle
- build.gradle
- settings.gradle
Run Code Online (Sandbox Code Playgroud)
主项目build.gradle是空白而主要项目settings.gradle如下:
include ':app', ':lib'
Run Code Online (Sandbox Code Playgroud)
Android应用程序build.gradle看起来像:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.8.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 18
buildToolsVersion "19.0.2"
defaultConfig {
minSdkVersion 18
targetSdkVersion 18
versionCode 1
versionName "1.0"
}
}
dependencies {
compile project(':lib')
} …Run Code Online (Sandbox Code Playgroud) 我有一个依赖于库项目(Lib1)的Android应用(App1)。该库项目具有多个远程依赖项(例如guava,android支持库等)和两个本地依赖项,它们是存储在Lib1 / libs /中的JAR文件。
这就是Lib1的build.gradle的依赖项部分的样子:
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile 'com.android.support:support-v4:20.0.+'
compile 'com.google.guava:guava:r08'
}
Run Code Online (Sandbox Code Playgroud)
如果我只编译该库(即gradle assemble在Lib1 /文件夹上运行),那么它将正确编译,但是当我将该库作为App1的依赖项添加时,gradle抱怨它无法在Lib1的libs /文件夹中找到两个jar。
这是App1的build.gradle:
dependencies {
compile project(':Lib1')
compile 'org.apache.james:apache-mime4j-core:0.7.2'
compile 'org.apache.jackrabbit:jackrabbit-webdav:2.3.6'
...
}
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉gradle,如果一个库依赖于本地jar文件,那么依赖于该库的项目也应该将它们包含为依赖项?远程依赖项可以正常工作,但是当libs /中有jar文件时,远程依赖项就不能正常工作。