由于androidannotations插件,Gradle构建失败

时间:2013-03-07 17:11:09

标签: android gradle android-annotations

我正在将graoannotations和gradle构建过程集成到一个通用的android项目中。当我尝试通过添加apply plugin: 'androidannotations来构建项目时,我得到以下失败:

$ gradle clean

FAILURE: Build failed with an exception.

* What went wrong:
Main Manifest missing from /tmp/RunTest/src/main/AndroidManifest.xml

注意(1):我想维护通用的android项目结构。 注意(2):我已经成功构建/清理了没有androidannotations插件的项目

build.gradle文件:

buildscript {
  repositories {
    mavenCentral()
  }

  dependencies {
    classpath 'com.android.tools.build:gradle:0.3'
    classpath 'net.ealden.gradle.plugins:gradle-androidannotations-plugin:0.3.0'
  }
}
apply plugin: 'android'
apply plugin: 'androidannotations'


repositories {
  mavenCentral()
}


android {
    def target = 'android-21'
    def androidAnnotationsVersion = '2.7.1'
    sourceSets {
        main {
            manifest {
                srcFile 'AndroidManifest.xml'
            }
            java {
                srcDir 'src'
            }
            res {
                srcDir 'res'
            }
            assets {
                srcDir 'assets'
            }
            resources {
                srcDir 'src'
            }
        }
        test {
            java {
                srcDir 'tests/src'
            }
        }
    }
}

所以,我已经试图维护通用的android项目结构并强制将项目目录结构强制转换到这里所指出的结构:http://tools.android.com/tech-docs/new-build-system/using-the-new-build-system

正如预期的那样,这解决了我Main Manifest missing from /tmp/RunTest/src/main/AndroidManifest.xml然而我仍然没有得到快乐。

现在我得到了:

MyBox:RunTest $ gradle clean
Download http://repo1.maven.org/maven2/net/ealden/gradle/plugins/gradle-androidannotations-plugin/0.3.0/gradle-androidannotations-plugin-0.3.0.pom
Download http://repo1.maven.org/maven2/org/gradle/api/plugins/gradle-android-plugin/1.1.0/gradle-android-plugin-1.1.0.pom
Download http://repo1.maven.org/maven2/net/ealden/gradle/plugins/gradle-androidannotations-plugin/0.3.0/gradle-androidannotations-plugin-0.3.0.jar
Download http://repo1.maven.org/maven2/org/gradle/api/plugins/gradle-android-plugin/1.1.0/gradle-android-plugin-1.1.0.jar

FAILURE: Build failed with an exception.

* What went wrong:
Cannot add task ':processTestResources' as a task with that name already exists.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 9.28 secs

4 个答案:

答案 0 :(得分:2)

看起来androidannotations插件应用了完整的Java gradle插件,该插件创建了一个与我们尝试创建的任务相冲突的processTestResources任务。

不幸的是我们使用了相同的名称,但实际上你并不想使用android插件将完整的Java插件应用于项目。 android插件只应用基础Java插件(它提供了创建Java编译任务的能力,但不创建完整Java插件创建的默认插件)。

老实说,我们的插件与常规Java的工作方式非常不同,而用于扩展Java项目的插件在Android项目中也不会起作用。(/ p>

你遇到的第一个错误看起来像是我们遇到过的问题(但很难再现),其中抛出了一些异常,但是Gradle忽略了它,跳过评估DSL的其余部分,并继续尝试构建。由于跳过了sourceSets重新映射,因此它正在寻找Manifest的错误位置。

答案 1 :(得分:2)

要将Android Annotations集成到您的项目中,请将以下内容添加到项目的build.gradle中:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        // other classpathes like gradle here, in my case
        classpath 'com.android.tools.build:gradle:1.1.0'

        // APT Dependency for annotation processing
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
    }
}

然后将androidannotation不作为插件应用但是' android-apt'在你的模块的build.gradle

// apply apt plugin from global gradle file
apply plugin: 'android-apt'

并将以下内容添加到构建文件中:

// Tell apt where to find sources
apt {
    arguments {
        androidManifestFile variant.outputs[0].processResources.manifestFile

        // adjust the path to your module here
        resourcePackageName 'de.company.app'
    }
}

dependencies {
    // Android Anotations for clean and readable code
    apt "org.androidannotations:androidannotations:3.2"
    compile 'org.androidannotations:androidannotations-api:3.2'
}

然后您应该能够在项目中使用Android Annotations。 要保持基于eclipse的项目结构,您可以像以前一样调整文件夹:

android {
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }
}

答案 2 :(得分:1)

  1. 您使用的是错误的gradle android插件(由Google开发的com.google.tools插件)
  2. androidannotations插件使用com.jvoegele.gradle.plugins.android插件,你不必将它添加到build.gradle,因为androidannotations插件将自己获取它。
  3. 使用ADT 21或更早版本作为gradle-android-plugin无法理解不是整数的版本(1.2.2-SNAPSHOT可以)

答案 3 :(得分:0)

作为示例,您可以查看

中的build.gradle文件

https://github.com/ealden/android-annotations-idea-test/blob/master/build.gradle