java.lang.NoSuchMethodError 编译时
java.lang.NoSuchMethodError on compile
我正在尝试编译 Android 项目但未成功。错误信息是:
Execution failed for task ':mobile:_compileAppDebug'.
java.lang.NoSuchMethodError: com.google.auto.common.MoreTypes.asTypeElements(Ljavax/lang/model/util/Types;Ljava/lang/Iterable;)Lcom/google/common/collect/ImmutableSet;
这是我模块的 gradle 依赖项,我在其中指定了一些库,包括 google Auto:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':library')
compile 'com.google.dagger:dagger:2.0-SNAPSHOT'
provided 'com.google.auto.value:auto-value:1.0-rc1'
apt 'com.google.dagger:dagger-compiler:2.0-SNAPSHOT'
provided 'org.glassfish:javax.annotation:10.0-b28'
compile 'com.jakewharton:butterknife:6.1.0'
compile 'com.f2prateek.dart:dart:1.1.0'
}
当我查看依赖项时,我认为我只需要 google auto 值,因为这是缺少方法所在的位置,但添加提供的方法并不能解决问题。
项目 gradle 文件包含 retrolambda 插件
dependencies {
classpath 'me.tatarka:gradle-retrolambda:2.5.0'
classpath 'com.android.tools.build:gradle:1.0.1'
classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.+'
classpath 'io.fabric.tools:gradle:1.+'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
}
谁能帮我确定是哪些依赖项导致了编译错误?有趣的是,当我将 gradle 文件复制到一个空项目中时,一切运行良好。
Dagger 2.0-SNAPSHOT 依赖于具有 API 更改的 Auto SNAPSHOT:https://github.com/google/dagger/issues/113
对于正在开发中的库来说,这是完全正常且可以接受的事情。如果您不能容忍偶尔出现的损坏构建,请不要以可以随时更改而不发出警告的方式依赖非发布版本。
我 运行 有类似的问题。我在 jar 文件中使用的一些库捆绑了 Guava。
因此从 apt 配置中排除这个特定的依赖关系解决了问题:
configurations {
apt.exclude module: 'artifactId-Of-Library'
}
我正在尝试编译 Android 项目但未成功。错误信息是:
Execution failed for task ':mobile:_compileAppDebug'.
java.lang.NoSuchMethodError: com.google.auto.common.MoreTypes.asTypeElements(Ljavax/lang/model/util/Types;Ljava/lang/Iterable;)Lcom/google/common/collect/ImmutableSet;
这是我模块的 gradle 依赖项,我在其中指定了一些库,包括 google Auto:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':library')
compile 'com.google.dagger:dagger:2.0-SNAPSHOT'
provided 'com.google.auto.value:auto-value:1.0-rc1'
apt 'com.google.dagger:dagger-compiler:2.0-SNAPSHOT'
provided 'org.glassfish:javax.annotation:10.0-b28'
compile 'com.jakewharton:butterknife:6.1.0'
compile 'com.f2prateek.dart:dart:1.1.0'
}
当我查看依赖项时,我认为我只需要 google auto 值,因为这是缺少方法所在的位置,但添加提供的方法并不能解决问题。
项目 gradle 文件包含 retrolambda 插件
dependencies {
classpath 'me.tatarka:gradle-retrolambda:2.5.0'
classpath 'com.android.tools.build:gradle:1.0.1'
classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.+'
classpath 'io.fabric.tools:gradle:1.+'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
}
谁能帮我确定是哪些依赖项导致了编译错误?有趣的是,当我将 gradle 文件复制到一个空项目中时,一切运行良好。
Dagger 2.0-SNAPSHOT 依赖于具有 API 更改的 Auto SNAPSHOT:https://github.com/google/dagger/issues/113
对于正在开发中的库来说,这是完全正常且可以接受的事情。如果您不能容忍偶尔出现的损坏构建,请不要以可以随时更改而不发出警告的方式依赖非发布版本。
我 运行 有类似的问题。我在 jar 文件中使用的一些库捆绑了 Guava。
因此从 apt 配置中排除这个特定的依赖关系解决了问题:
configurations {
apt.exclude module: 'artifactId-Of-Library'
}