我的项目中需要json-lib。
我已将json-lib
添加到我的gradle依赖项中,而这又依赖于各种公共库。
这是我的app / build.gradle的相关部分(根据以下Médéric的建议更新)
dependencies {
compile 'commons-collections:commons-collections:3.2.1'
compile 'net.sf.json-lib:json-lib:2.4:jdk15'
compile 'commons-beanutils:commons-beanutils:1.8.0'
compile 'commons-lang:commons-lang:2.6'
compile 'commons-logging:commons-logging:1.1.1'
compile 'net.sf.ezmorph:ezmorph:1.0.6'
然而,当我尝试运行我的应用程序时,我得到以下内容:
java.lang.IllegalArgumentException: already added:org/apache/commons/collections/ArrayStack;
因此依赖性与我认为的Android Studio提供的库发生冲突。
我试图像这样排除违规文件:
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/services/org.apache.commons.collections.ArrayStack'
但这不起作用。
如果我不包含上面的依赖项,在运行时我会收到以下错误:
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/commons/collections/map/ListOrderedMap;`
我正在使用Gradle版本2.2.1和Android插件版本1.2.3运行Android Studio 1.2.1.1
添加了build.gradle的存储库部分:
allprojects {
repositories {
maven {
url 'http://download.crashlytics.com/maven'
artifactUrls 'http://mvnrepository.com'
}
jcenter()
mavenCentral()
}
}
apply plugin: 'com.android.application'
apply plugin: 'crashlytics'
android {
compileSdkVersion 'Google Inc.:Google APIs:10'
buildToolsVersion "22.0.1"
repositories {
maven {
url 'http://download.crashlytics.com/maven'
artifactUrls 'http://mvnrepository.com'
}
}
这是导致运行时错误的代码:
public static String toString(Object o) {
try {
// the call to JSONObject.fromObject() below causes the runtime error. It is used to detect circular references
JSONObject.fromObject(o);
return objectGraphAsString(o, new StringBuffer()).toString();
} catch (JSONException e) {
...
}
return "";
}
这是堆栈跟踪:
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/commons/collections/map/ListOrderedMap;
at net.sf.json.JSONObject.<init>(JSONObject.java:1450)
at net.sf.json.util.CycleDetectionStrategy.<clinit>(CycleDetectionStrategy.java:37)
at net.sf.json.JsonConfig.<clinit>(JsonConfig.java:65)
at net.sf.json.JSONObject.fromObject(JSONObject.java:134)
更新:
我现在正在尝试使用不同的第三方库,在本例中为XStream,我在碰撞依赖中遇到了类似的错误。
我不能成为第一个需要添加这样的依赖的人。 Android构建过程真的破了吗?
答案 0 :(得分:1)
您是否尝试使用真正的依赖项而不是jar文件?
替换
compile files('libs/json-lib-2.4-jdk15.jar')
通过
compile 'net.sf.json-lib:json-lib:2.4:jdk15'
并对其他lib执行相同的操作:gradle将设法解决递归依赖关系。
修改强>
您需要排除多个库通用的commons-collections。试试这个
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.1.1'
compile('net.sf.json-lib:json-lib:2.4:jdk15') {
exclude group: 'commons-collections', module: 'commons-collections'
}
compile 'commons-beanutils:commons-beanutils:1.8.0'
compile 'commons-lang:commons-lang:2.6'
compile 'commons-logging:commons-logging:1.1.1'
compile 'net.sf.ezmorph:ezmorph:1.0.6'
}