使用UnsupportedNotationException,Gradle多项目构建失败

时间:2013-12-06 21:56:26

标签: android gradle android-studio

我正在尝试将Eclipse / ANT项目转换为Android Studio&摇篮。我从Eclipse导出了gradle构建脚本,将一些第三方库翻译成maven central repo引用,并将项目导入Android Studio。

我正在尝试设置多项目构建。我目前的结构是:

Root     
  -- AndroidLibraryProject    
    -- build.gradle
  -- AndroidAppProject
    -- build.gradle
    -- settings.gradle

相关构建文件的内容如下:

AndroidLibraryProject /的build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}
apply plugin: 'android-library'

repositories {
    mavenCentral()
    maven {
        url "https://github.com/dahlgren/vpi-aar/raw/master"
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:18.0.+'
    compile 'com.viewpagerindicator:library:2.4.2-SNAPSHOT'
    compile files('libs/crashlytics.jar')
    compile files('libs/gson-2.0.jar')
}

android {
    compileSdkVersion "Google Inc.:Google APIs:19"
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 17
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
}

AndroidAppProject /的build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}

evaluationDependsOn(':AndroidLibraryProject')

apply plugin: 'android'

dependencies {
    compile project()
}

android {
    compileSdkVersion 18
    buildToolsVersion "19"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src2']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }
}

AndroidAppProject / settings.gradle

include ':AndroidLibraryProject'
project(':AndroidLibraryProject').projectDir = new File(settingsDir, '../AndroidLibraryProject')

LibraryProject可以自行清理和构建。

A problem occurred evaluating root project 'AndroidAppProject'.
> org.gradle.api.internal.notations.api.UnsupportedNotationException (no error message)

并且堆栈跟踪是:

* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'AndroidAppProject'.
    at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:54)
    at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:132)
    at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:38)
    at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:25)
    at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:55)
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:468)
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:76)
    at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:31)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:142)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
    at org.gradle.api.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
    at org.gradle.launcher.Main.doAction(Main.java:46)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at org.gradle.launcher.Main.main(Main.java:37)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
    at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:127)
    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:58)
Caused by: org.gradle.api.internal.notations.api.UnsupportedNotationException
    at org.gradle.api.internal.notations.parsers.TypedNotationParser.parseNotation(TypedNotationParser.java:45)
    at org.gradle.api.internal.notations.ProjectDependencyFactory.createFromMap(ProjectDependencyFactory.java:37)
    at org.gradle.api.internal.artifacts.DefaultDependencyFactory.createProjectDependencyFromMap(DefaultDependencyFactory.java:59)
    at org.gradle.api.internal.artifacts.dsl.dependencies.DependencyFactory$createProjectDependencyFromMap.call(Unknown Source)
    at org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.project(DefaultDependencyHandler.groovy:75)
    at build_61tpm2tlp3rmsq0660pqjvv93o$_run_closure1.doCall(/Users/seth/Documents/Development/Android/AndroidAppProject/build.gradle:15)
    at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:58)
    at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:130)
    at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:91)
    at org.gradle.api.internal.project.AbstractProject.dependencies(AbstractProject.java:883)
    at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:246)
    at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:134)
    at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:147)
    at org.gradle.groovy.scripts.BasicScript.methodMissing(BasicScript.java:79)
    at build_61tpm2tlp3rmsq0660pqjvv93o.run(/Users/seth/Documents/Development/Android/AndroidAppProject/build.gradle:14)
    at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:52)
    ... 33 more

这里的任何指导都将非常感谢。我对这个项目配置有什么不妥吗?我甚至不确定它与我的构建配置有什么关系。

2 个答案:

答案 0 :(得分:3)

settings.gradle文件向上移动一级到根目录。你应该能够像这样指定它:

include ':AndroidLibraryProject', ':AndroidAppProject'

应用的构建文件中带有evaluationDependsOn的位可能比您需要的更复杂。拥有应用程序的正常方式取决于库项目:

dependencies {
    compile project(':AndroidLibraryProject')
}

目前Android Studio不支持在项目根目录(https://code.google.com/p/android/issues/detail?id=56367)之外使用库或模块,我认为您的原始设置可能符合条件,因为它可能会处理包含settings.gradle的目录作为根。如我所描述的那样设置的东西会更快乐。

答案 1 :(得分:0)

虽然Scott Barta是对的 - 我的settings.gradle文件位于错误的目录级别并且evaluateDependsOn是不必要的,但它仍然不是UnsupportedNotationException的原因。显然是对

的呼唤

AndroidAppProject /的build.gradle

dependencies {
    compile project()
}

完全没必要,即使这是Eclipse中ADT导出Gradle的结果。我在Android Studio中创建了一个新项目,并将它创建的构建文件与我的相比较,并注意到了这种差异。

删除它并将我的settings.gradle文件移动到根目录后,它就在那里了。

相关问题