【问题标题】:How to load Gradle Plugin (with its depenecies) into build.gradle?如何将 Gradle 插件(及其依赖项)加载到 build.gradle 中?
【发布时间】:2016-06-28 16:45:47
【问题描述】:

我有一个项目有两个 gradle 文件:build.gradlemyPlugin.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”的插件?

【问题讨论】:

  • 听起来你的 myPlugin.gradle 找不到 ID 为 com.google.osdetector 的插件,也许你应该在 myPlugin.gradle 中添加一个 buildscript 部分(带有适当的存储库部分)?
  • 我确实在 myPlugin.gradle 中添加了 buildscript 部分,但仍然有同样的错误? main build.gradle 和 myPlugin.gradle 中的依赖关系之间是否存在关系?

标签: gradle


【解决方案1】:

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

buildscript {

  repositories {
     mavenCentral()
     mavenLocal()
  }

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

}

编辑

请看here - 看来如果你需要apply from 第三方脚本你需要使用完整的类名(带包)。所以文件应该定义如下:

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)

【讨论】:

  • 你的意思是我应该在 myPlugin.gradle 或 build.gradle 中添加这段代码?我已经添加到 myPlugin.gradle 并且仍然遇到同样的错误
  • @WaelShowair,在你应用插件的文件中——据我所知是myPlugin.gradle——注意依赖的范围是classpath而不是compile
  • 我将你的代码复制粘贴到 myPlugin.gradle 但我仍然有同样的错误,有什么建议吗?顺便说一句:如果我在 buildscript 部分的 build.gradle 中添加类路径,myPlugin 工作正常 -> 依赖项
  • @WaelShowair,我已经编辑了答案,请看一下。
猜你喜欢
  • 1970-01-01
  • 2016-03-28
  • 2021-01-07
  • 2020-06-27
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
相关资源
最近更新 更多