【问题标题】:Gradle: classpath dependency not resolved from nested projectGradle:类路径依赖项未从嵌套项目中解析
【发布时间】:2017-02-22 12:42:06
【问题描述】:

我有一个带有 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 版本 3.1;Android Gradle 插件版本: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 gradle android-gradle-plugin


    【解决方案1】:

    我已经看到了这样的文件夹安排,尤其是包含 android 文件夹和 web 文件夹的 google 示例项目。您可以尝试使用 android 文件夹作为项目文件夹导入项目,因为如果您的项目还有另外两个文件夹,您可能不会使用 gradle 来构建 Ios 和 web。

    所以关闭项目并使用android文件夹作为项目根目录重新导入它,我相信这样,gradle应该可以正常运行。我的项目文件夹也是这样的,因为我在一个仓库中同时拥有 web 和 android 项目,但是在使用 android studio 构建期间,我使用 android 文件夹作为 android 的项目根目录。

    【讨论】:

    • 非常感谢您的建议。我将我的项目分开,以获得对 hte 模块依赖项的细粒度控制。我会将您的答案标记为已接受,尽管它不能解决最初的问题。
    【解决方案2】:

    我遇到了类似的问题。我从拥有一个包含 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。为了让它们包含 shared 和 build,我将 symbolic links 放到 shared、gradlew、gradlew.bat 和 gradle 文件夹中,从 android 文件夹到 device1 和 device2。瞧,它有效! (我使用的是 Ubuntu 计算机,但应该能够在 Windows 和 Mac 上执行相同操作。)

    缺点是每次都建立shared。在我们的例子中,这并不算太糟糕,也不是很大。

    [标签:多级项目]

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 2018-04-06
      • 1970-01-01
      • 2018-06-14
      • 2022-10-02
      相关资源
      最近更新 更多