[英]Gradle: classpath dependency not resolved from nested project
我有一个带有gradle的多项目构建设置,它将包含多个Android应用程序和库。
项目结构示例:
root (Project Root)
| android
| module1 (Android Application)
| module2 (Android Library)
| ios (in the future)
我想将某些gradle插件仅应用于某些子项目。 (例如android gradle插件只对android子项目)因此我在:android -> build.gradle
和两个android子项目的插件声明中添加了类路径依赖:
:android:module1 -> build.gradle -> apply plugin: 'com.android.application'
和
:android:module2 -> build.gradle -> apply plugin: 'com.android.library'
问题是gradle找不到android gradle插件:
错误:(1,1)评估项目':Shoppr:presentation'时出现问题。 找不到ID为'com.android.application'的插件。
此外,它不像其他一些问题(Gradle Version 3.1; Android Gradle Plugin Version:2.2.1)中的版本问题,因为在以下位置定义类路径依赖项时:root -> build.gradle
或:android:moduleX -> build.gradle
一切都按预期工作。
:root - > build.gradle
allprojects {
repositories {
mavenCentral()
jcenter()
}
}
:android - > build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.1' <-- Should only be applied for android project
}
}
:android:module1 - > build.gradle
apply plugin: 'com.android.application' --> Plugin with id 'com.android.application' not found.
:android:module2 - > build.gradle
apply plugin: 'com.android.library'
我已经看到这样的文件夹安排,尤其是谷歌示例项目,包括和android文件夹,还有一个Web文件夹。 你可以尝试使用android文件夹作为项目文件夹导入项目,因为你可能没有使用gradle来构建Ios和web,如果你有另外两个文件夹为你的项目。
所以关闭项目并使用android文件夹作为项目根重新导入它,我相信这样,gradle应该运行正常。 我的项目文件夹也是这样的,因为我在一个单独的回购中有web和android项目,但在使用android studio构建时,我使用android文件夹作为android的项目根目录。
我有一个类似的问题。 我从一个带有3个子任务的android文件夹转到用子任务划分为3个文件夹:
| android
| shared
-- generates aar
| device1
-- generates 2 apks
| device2
-- generates 1 apk
| gradle
gradlew.bat
gradlew
device1和device2都想使用共享。 所以我从android文件夹中删除了settings.gradle和build.grade。 device1,device2和shared都有自己的build.grade和settings.gradle。 我分别构建device1和device2。 为了让它们包含共享和构建,我将android文件夹中的shared,gradlew,gradlew.bat和gradle文件夹的符号链接放入device1和device2。 瞧,它有效! (我在Ubuntu计算机上,但应该可以在Windows和Mac上执行相同操作。)
缺点是每次都建立共享。 在我们的例子中,这不是太糟糕,它不是很大。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.