Gradle 3.4.x无法在项目特定的行为中应用插件

时间:2017-04-04 22:35:11

标签: gradle android-gradle

我正在关注多项目构建的文档 https://docs.gradle.org/current/userguide/multi_project_builds.html

我有一个外部依赖项,我将其合并到我的主build.gradle中 但是,收到错误

Error:Plugin with id 'com.android.library' not found.

我的主build.gradle的一部分

project(':myexternallibrary') {
    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath "com.android.tools.build:gradle:$versions.androidPluginVersion"
            // classpath "me.tatarka:gradle-retrolambda:3.6.0"
        }
    }



    android {
    }


    model {
        components {
            main() {
                sources {
                    java {
                        source {
                            srcDirs "src/main"
                        }
                        // configure the "java" source set
                    }
                }
            }
        }
  }
  **apply plugin: 'com.android.library'**
  dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        //    androidTestCompile 'junit:junit:4.12'
        compile 'com.google.code.gson:gson:2.8.0'
  }
}

我做错了什么? (我不能在myexternallibrary的build.gradle中应用com.android.library(因为我在非android构建中也使用了这个库)

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。有几个技巧可以使上述工作(再次目标是在Android和非Android构建中使用相同的Java库与AndroidStudio和IntelliJ社区版)。

在主应用程序的build.gradle中 我不得不替换

apply plugin: 'com.android.library'

apply plugin: com.android.build.gradle.LibraryPlugin

我没有解释,为什么我必须用它的类名替换插件名。 这可能是一个错误,我在2013年的某个地方找到了一个引用不同但类似问题的帖子。所以似乎gradle在过去的4年里没有修复它。

以下是更新后的部分的外观 ...

project(':myexternallibrary') {
apply plugin: com.android.build.gradle.LibraryPlugin
android {
    compileSdkVersion 25
    buildToolsVersion '25.0.2'
}

//'com.android.tools.build
//apply plugin: 'com.android.library'
//apparently within a project we must specify a class name of the plugin
//without quotes...
apply plugin: com.android.build.gradle.LibraryPlugin

model {
    components {
        main() {
            sources {
                java {
                    source {
                        srcDirs "src/main"
                    }
                }
            }
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile 'junit:junit:4.12'
    compile 'com.google.code.gson:gson:2.8.0'
}

}

我学到的另一件事是,我必须将myexternallibrary的build.gradle保持为“哑”。例如,我有一个指令将临时构建文件存放到不同的目录中(因为在窗口上超出了路径长度)

allprojects {
        repositories {
            jcenter()
        }
        buildDir = "${System.getenv('HOME')}/tmp/${rootProject.name}/${project.name}"
}

但是那个指令(buildDir),即使之前工作正常,在这个新的构建结构中 - 导致gradle混淆目录..而且我得到了'找不到AndroidManifest.xml'......