我正在尝试重新组织此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。
答案 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手册显示的模块目录。