如何将Gradle插件(及其依赖项)加载到build.Gradle中?

如何将Gradle插件(及其依赖项)加载到build.Gradle中?,gradle,Gradle,我有一个项目有两个gradle文件:build.gradle和myPlugin.gradle myPlugin.gradle实现了插件接口。该插件还依赖于 我将两个gradle文件并排添加,然后尝试将myPlugin应用于build.gradle,如下所示: apply from: 'myPlugin.gradle' 但是,我在myPlugin.gradle文件中遇到以下错误: Plugin with id 'com.google.osdetector' not found apply pl

我有一个项目有两个gradle文件:
build.gradle
myPlugin.gradle

myPlugin.gradle
实现了插件接口。该插件还依赖于

我将两个gradle文件并排添加,然后尝试将myPlugin应用于
build.gradle
,如下所示:

apply from: 'myPlugin.gradle'
但是,我在
myPlugin.gradle
文件中遇到以下错误:

Plugin with id 'com.google.osdetector' not found
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)
以下是
myPlugin.gradle
文件的代码:

Plugin with id 'com.google.osdetector' not found
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)

如何解决id为'com.google.osdetector'的插件找不到?

这是一个常见的陷阱,要将插件添加到
build.gradle
文件,您需要为构建脚本本身添加依赖项,而不是为项目添加依赖项。以下代码(添加到应用插件的文件中)应该可以解决此问题:

buildscript {

  repositories {
     mavenCentral()
     mavenLocal()
  }

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

}
编辑

请看一看-如果您需要从第三方脚本应用
,您需要使用完整的类名(与包一起)。因此,文件应定义如下:

apply from: 'myPlugin.gradle'
格雷德尔先生

myPlugin.gradle

buildscript{
存储库{
mavenCentral()
}
依赖关系{
classpath'com.google.gradle:osdetector gradle插件:1.4.0'
}
}
应用插件:“groovy”
应用插件:“maven”
应用插件:com.google.gradle.osdetector.OsDetectorPlugin
应用插件:HostingMachineOSPlugin
类HostingMachineOSPlugin实现插件{
无效申请(项目){
project.plugins.apply(com.google.gradle.osdetector.OsDetectorPlugin);
//project.configurations.files('com.google.osdetector')
println project.osdetector.os
/*扩展项目属性以使类HostingMachineOS*/
project.ext.HostingMachineOS=HostingMachineOS
}
}
公共类主机{
静态族=“未知”
静态def setFamilyName(名称){
姓
}
静态def isLinux(){
family==“linux”
}
静态窗口(){
族==“windows”
}
静态定义isMacOS(){
系列==“osx”
}
}
HostingMachineOS.setFamilyName(osdetector.os)

听起来像你的
myPlugin.gradle
找不到id为
com.google.osdetector
的插件,也许你应该在你的
myPlugin.gradle
中添加一个buildscript部分(带有适当的存储库部分)?我确实在myPlugin.gradle中添加了buildscript部分,但仍然有相同的错误?main build.gradle和myPlugin.gradle中的依赖项之间有关系吗?你是说我应该在myPlugin.gradle或build.gradle中添加这段代码?我已经添加到myPlugin.gradle中,但仍然得到了相同的结果error@WaelShowair,在应用插件的文件中-据我所知,它是
myPlugin.gradle
-请注意,依赖项的范围是
classpath
而不是
compile
。我将您的代码复制粘贴到myPlugin.gradle中,但仍然有相同的错误,有什么建议吗?顺便说一句:如果我在buildscript部分内的build.gradle中添加类路径->dependencies@WaelShowair,我已经编辑了答案,请看一下。