buildSrc:无法获取类型为org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler的对象的未知属性

时间:2020-06-02 19:43:00

标签: java android gradle buildsrc

我正在尝试重新组织此Android (Java based) library,以使用buildSrc文件夹定义此article中所述的所有版本和依赖项。

我已经为Kotlin基地项目成功设置了好几次。这次的项目是纯Java

buildSrc文件夹中,我创建了以下buildSrc/src/main/java/org/ligi/snackengage/Dependencies.java文件:

package org.ligi.snackengage;

public class Dependencies {

    public static class Android { /* ... */ }

    public static class GradlePlugins {
        public static final String ANDROID = "com.android.tools.build:gradle:3.6.3";
        // ...
    }

    public static class Libs { /* ... */ }

}

然后我参考项目根build.gradle中的定义:

import org.ligi.snackengage.Dependencies.GradlePlugins

apply plugin: "com.github.ben-manes.versions"

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath GradlePlugins.ANDROID
        classpath GradlePlugins.MAVEN
        classpath GradlePlugins.VERSIONS
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

这里是work in progress branch。当我构建项目时,会发生以下错误:

* Where:
Build file 'SnackEngage/build.gradle' line: 12

* What went wrong:
A problem occurred evaluating root project 'SnackEngage'.
> Could not get unknown property 'GradlePlugins' for object of type
  org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

这里是build log

2 个答案:

答案 0 :(得分:2)

您已将GradlePlugins类定义为Dependencies的内部静态类,因此您需要使用Dependencies.GradlePlugins从构建脚本中访问它。

按如下所示更改您的依赖项块:

import org.ligi.snackengage.Dependencies // do not import org.ligi.snackengage.Dependencies.GradlePlugins
buildscript {
    // ...
    dependencies {
        classpath Dependencies.GradlePlugins.ANDROID
        classpath Dependencies.GradlePlugins.MAVEN
        classpath Dependencies.GradlePlugins.VERSIONS
    }
}

编辑,您还可以使用静态导入,如下所示:

import static org.ligi.snackengage.Dependencies.*
buildscript {
    // ...
    dependencies {
        classpath GradlePlugins.ANDROID
        classpath GradlePlugins.MAVEN
        classpath GradlePlugins.VERSIONS
    }
}

答案 1 :(得分:0)

在尝试访问变量之前,您需要使用GradlePlugins(在Gradle中)或def(在Java中)定义变量public class GradlePlugins。 Kotlin class GradlePlugins也应该起作用。

dependencies {
    classpath GradlePlugins.ANDROID
    classpath GradlePlugins.MAVEN
    classpath GradlePlugins.VERSIONS
}

而且我认为buildSrc目录属于Gradle手册显示的模块目录。