2016-06-28 124 views
2

我有兩個gradle這個文件的項目:build.gradlemyPlugin.gradle如何將Gradle Plugin(及其依賴)加載到build.gradle中?

myPlugin.gradle實現的插件接口。該插件還對osdetector-gradle-plugin

我加了對方旁邊兩個gradle這個文件的依賴性,然後我試圖申請爲myplugin爲build.gradle如下:

apply from: 'myPlugin.gradle' 

不過,我有以下錯誤myPlugin.gradle文件:

Plugin with id 'com.google.osdetector' not found 

這裏是myPlugin.gradle文件的代碼:

apply plugin: 'groovy' 
apply plugin: 'maven' 

    repositories { 
    mavenCentral() 
    mavenLocal() 
    } 
    dependencies { 
     compile 'com.google.gradle:osdetector-gradle-plugin:1.4.0' 
    } 

import org.gradle.api.tasks.TaskAction 
import org.gradle.api.DefaultTask 
import org.gradle.api.Plugin 
import org.gradle.api.Project 

apply plugin: 'com.google.osdetector' 
apply plugin: HostingMachineOSPlugin 

class HostingMachineOSPlugin implements Plugin<Project>{ 
    void apply(Project project){ 
     project.plugins.apply("com.google.osdetector"); 
     //project.configurations.files('com.google.osdetector') 
     println project.osdetector.os 

     /* Extend the project property to have the class HostingMachineOS */ 
     project.ext.HostingMachineOS = HostingMachineOS 
    } 
} 

public class HostingMachineOS { 

    static family = "Unkown" 

    static def setFamilyName(name){ 
     family = name 
    } 

    static def isLinux(){ 
     family == "linux" 
    } 

    static def isWindows(){ 
     family == "windows" 
    } 

    static def isMacOS(){ 
     family == "osx" 
    } 
} 

HostingMachineOS.setFamilyName(osdetector.os) 

build.gradle文件:我只是做這樣的事情:

//定義buildScript庫和依賴然後

apply from: 'myPlugin.gradle' 

task dummy{ 
    println HostingMachineOS.isMacOS() 
    println HostingMachineOS.isLinux() 
    println HostingMachineOS.isWindows() 
} 

我怎樣才能解決這個插件ID爲「com.google.osdetector」不發現了什麼?

+0

聽起來像是你的'myPlugin.gradle'找不到插件ID爲' com.google.osdetector',也許你應該在'myPlugin.gradle'中添加一個buildscript部分(帶有適當的倉庫部分)? – RaGe

+0

我在myPlugin.gradle中添加了buildscript部分,但仍然有相同的錯誤?主build.gradle和myPlugin.gradle之間的依賴關係是否存在關係? –

回答

0

這是一個常見的錯誤,爲build.gradle文件添加一個插件需要爲構建腳本本身添加一個依賴項 - 不適用於項目。下面的代碼(如果您申請的插件文件中添加)片就可以解決這個問題:

buildscript { 

    repositories { 
    mavenCentral() 
    mavenLocal() 
    } 

    dependencies { 
    classpath 'com.google.gradle:osdetector-gradle-plugin:1.4.0' 
    } 

} 

編輯

請看看here - 看來,如果你需要apply from第三-party腳本你需要使用完整的類名(包)。因此,如下的文件應該被定義爲:

的build.gradle

apply from: 'myPlugin.gradle' 

task dummy{ 
    println HostingMachineOS.isMacOS() 
    println HostingMachineOS.isLinux() 
    println HostingMachineOS.isWindows() 
} 

myPlugin.gradle

buildscript { 
    repositories { 
    mavenCentral() 
    } 
    dependencies { 
    classpath 'com.google.gradle:osdetector-gradle-plugin:1.4.0' 
    } 
} 

apply plugin: 'groovy' 
apply plugin: 'maven' 
apply plugin: com.google.gradle.osdetector.OsDetectorPlugin 
apply plugin: HostingMachineOSPlugin 

class HostingMachineOSPlugin implements Plugin<Project>{ 
    void apply(Project project){ 
     project.plugins.apply(com.google.gradle.osdetector.OsDetectorPlugin); 
     //project.configurations.files('com.google.osdetector') 
     println project.osdetector.os 

     /* Extend the project property to have the class HostingMachineOS */ 
     project.ext.HostingMachineOS = HostingMachineOS 
    } 
} 

public class HostingMachineOS { 

    static family = "Unkown" 

    static def setFamilyName(name){ 
     family = name 
    } 

    static def isLinux(){ 
     family == "linux" 
    } 

    static def isWindows(){ 
     family == "windows" 
    } 

    static def isMacOS(){ 
     family == "osx" 
    } 
} 

HostingMachineOS.setFamilyName(osdetector.os) 
+0

你的意思是我應該在myPlugin.gradle或build.gradle中添加這段代碼?我已經添加到myPlugin.gradle中,並且仍然在應用插件的文件中出現同樣的錯誤 –

+0

@WaelShowair,就我看到的是myPlugin.gradle而言 - 請注意,依賴項的範圍是「classpath」而不是'compile'。 – Opal

+0

我將paste代碼複製到myPlugin.gradle中,但我仍然有同樣的錯誤,有什麼建議嗎?順便說一句:myPlugin工作正常,如果我將buildpath中的classpath添加到buildscript部分 - > dependencies –