如何从另一个插件应用Gradle插件?

如何从另一个插件应用Gradle插件?,gradle,android-gradle-plugin,Gradle,Android Gradle Plugin,我试图将android插件封装在我自己的插件中,但当我尝试应用插件构建时,出现了一个异常: A problem occurred evaluating root project 'myproj'. > Failed to apply plugin [id 'com.mycomp.build'] > Failed to apply plugin [id 'android-library'] > Plugin with id 'android-library' not

我试图将android插件封装在我自己的插件中,但当我尝试应用插件构建时,出现了一个异常:

A problem occurred evaluating root project 'myproj'.
> Failed to apply plugin [id 'com.mycomp.build']
  > Failed to apply plugin [id 'android-library']
    > Plugin with id 'android-library' not found.
以下是我如何在自己的插件实现中应用android插件:

// build.gradle
apply plugin: 'groovy'

version = '1.0'
group = 'com.mycomp'

dependencies {
    compile gradleApi()
    compile localGroovy()
}

// Build.groovy
package com.mycomp

import org.gradle.api.Plugin
import org.gradle.api.Project

class Build implements Plugin<Project> {
    void apply(Project project) {
        println 'Hello from com.mycomp.Build'
        project.beforeEvaluate {
            buildscript.configurations.classpath += 
                'com.android.tools.build:gradle:1.0.0-rc1'
        }

        project.configure(project) {
            buildscript.repositories.mavenCentral()
            apply plugin: 'android-library'
        }
    }
}
//build.gradle
应用插件:“groovy”
版本='1.0'
组='com.mycop'
依赖关系{
编译gradi()
编译localGroovy()
}
//Build.groovy
包com.mycop
导入org.gradle.api.Plugin
导入org.gradle.api.Project
类构建实现插件{
无效申请(项目){
打印'Hello from com.mycop.Build'
项目评估前{
buildscript.configurations.classpath+=
'com.android.tools.build:gradle:1.0.0-rc1'
}
项目。配置(项目){
buildscript.repositories.mavenCentral()
应用插件:“android库”
}
}
}

由于某些原因,类路径没有被正确加载,我做错了什么?

我想在您想要添加构建脚本的插件依赖项时,已经解决了,因此它不会以这种方式工作。您需要指定要作为脚本依赖项应用的插件

它将以这种方式工作:

buildscript {
   repositories {
      mavenCentral()
   }

   dependencies {
      classpath 'com.android.tools.build:gradle:1.0.0-rc1'
   }
}


apply plugin: 'groovy'
apply plugin: Build

version = '1.0'
group = 'com.mycomp'

dependencies {
    compile gradleApi()
    compile localGroovy()
}

import org.gradle.api.Plugin
import org.gradle.api.Project

class Build implements Plugin<Project> {
    void apply(Project project) {
        project.configure(project) {
            apply plugin: 'android-library'
        }
    }
}
buildscript{
存储库{
mavenCentral()
}
依赖关系{
classpath'com.android.tools.build:gradle:1.0.0-rc1'
}
}
应用插件:“groovy”
应用插件:构建
版本='1.0'
组='com.mycop'
依赖关系{
编译gradi()
编译localGroovy()
}
导入org.gradle.api.Plugin
导入org.gradle.api.Project
类构建实现插件{
无效申请(项目){
项目。配置(项目){
应用插件:“android库”
}
}
}

现在,找到了
android插件
,但它失败了,因为
groovy
plugin之前已经应用过,并且存在冲突

使用项目的
PluginManager
。例如,
java
插件如下:

public类WarPlugin实现插件{
// ...
公开作废申请(最终项目){
project.getPluginManager().apply(org.gradle.api.plugins.JavaPlugin.class);
// ...
}
// ...
}

请不要在此处和上方重复发布。当您不拥有要应用的插件时,这是否有效?如果我想使用给定的groupId/版本应用第三方插件,该怎么办?我只是将它声明为插件项目的常规依赖项吗?我想是的。只要你能导入插件类,你就可以了。