2014-12-05 17 views
6

Próbuję incapsulate android wtyczki w moim plugin, ale gdy próbuję zastosować mój build plugin nie działa z wyjątkiem:Jak zastosować wtyczkę Gradle z innej wtyczki?

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. 

Oto jak ja stosowania android wtyczki wewnątrz mój własny implementacja wtyczki:

// 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' 
     } 
    } 
} 

Z jakiegoś powodu ścieżka klas nie jest poprawnie ładowana, co robię źle?

+0

proszę nie double post tutaj i na http://forums.gradle.org. –

Odpowiedz

5

Domyślam się, że w momencie, w którym chcesz dodać zależności wtyczki do skryptu kompilacji, zostały one już rozwiązane, a zatem nie będą działać w ten sposób. Musisz określić wtyczkę, którą chcesz zastosować jako zależność od skryptu.

To będzie działać w ten sposób:

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' 
     } 
    } 
} 

Teraz android-plugin zostanie znaleziony, ale nie ze względu na fakt, że groovy plugin został zastosowany wcześniej i nie ma konfliktu.

+0

@ Pood1331, czy tego właśnie szukałeś? – Opal

2

Użyj projektu PluginManager. Na przykład, war plugin ciągnie w java wtyczki tak:

public class WarPlugin implements Plugin<Project> { 
    // ... 
    public void apply(final Project project) { 
     project.getPluginManager().apply(org.gradle.api.plugins.JavaPlugin.class); 
     // ... 
    } 
    // ... 
} 
Powiązane problemy