在我的Android应用中,当执行引用依赖.jar中的代码的代码时,我得到java.lang.NoClassDefFoundError
。我的项目包括一个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
主项目build.gradle
为空白而主要项目settings.gradle
如下:
include ':app', ':lib'
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')
}
图书馆build.gradle
是:
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile <some-dependency-in-maven>
compile files('libs/local-dependency.jar')
}
所有内容都编译并打包没有错误,我在IDE(IntelliJ 13)中没有看到任何错误。出于某种原因,我的local-dependency.jar
在Android编译期间没有被添加到dex-ing进程中。 lib
项目中指定的任何maven依赖项都会添加到Android .apk中;这只是我本地的jar依赖。有什么我想念的吗?
谢谢!
答案 0 :(得分:6)
这不可能直接实现,因为Gradle中没有将本地jar声明为传递依赖。
您有两种选择:
第二个选项使您能够让多个项目直接依赖于本地jar(在它之上成为传递依赖)。要做到这一点,请创建一个新的gradle项目,然后只需输入build.gradle
以下内容:
configurations.create("default")
artifacts.add("default", file('somelib.jar'))
这只是将您的jar注册为项目发布的默认工件,这将被其他项目使用。
答案 1 :(得分:0)
在最近的(4 +,IIRC)版本的gradle中,您可以通过以下配置实现此目的:
compile (project(':ProjectIDependOn')) {
transitive = true
}
当依赖于另一个项目时,将transitive
设置为true会将所有项目的库公开给该项目。