buildSrc:无法为 org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler 类型的对象获取未知 属性
buildSrc: Could not get unknown property for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler
我正在尝试重组此 Android (Java based) library to use the buildSrc folder to define all versions and dependencies as described in this 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.
您需要先用 def
(在 Gradle 中)或 public class GradlePlugins
(在 Java 中)定义变量 GradlePlugins
,然后再尝试访问它。 Kotlin class GradlePlugins
也应该可以工作。
dependencies {
classpath GradlePlugins.ANDROID
classpath GradlePlugins.MAVEN
classpath GradlePlugins.VERSIONS
}
而且我认为 buildSrc
目录属于模块目录,如 Gradle 手册所示。
您已将 GradlePlugins
class 定义为 Dependencies
的内部静态 class,因此您需要使用 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
}
}
EDIT 您也可以使用静态导入,如下所示:
import static org.ligi.snackengage.Dependencies.*
buildscript {
// ...
dependencies {
classpath GradlePlugins.ANDROID
classpath GradlePlugins.MAVEN
classpath GradlePlugins.VERSIONS
}
}
我正在尝试重组此 Android (Java based) library to use the buildSrc folder to define all versions and dependencies as described in this 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.
您需要先用 def
(在 Gradle 中)或 public class GradlePlugins
(在 Java 中)定义变量 GradlePlugins
,然后再尝试访问它。 Kotlin class GradlePlugins
也应该可以工作。
dependencies {
classpath GradlePlugins.ANDROID
classpath GradlePlugins.MAVEN
classpath GradlePlugins.VERSIONS
}
而且我认为 buildSrc
目录属于模块目录,如 Gradle 手册所示。
您已将 GradlePlugins
class 定义为 Dependencies
的内部静态 class,因此您需要使用 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
}
}
EDIT 您也可以使用静态导入,如下所示:
import static org.ligi.snackengage.Dependencies.*
buildscript {
// ...
dependencies {
classpath GradlePlugins.ANDROID
classpath GradlePlugins.MAVEN
classpath GradlePlugins.VERSIONS
}
}