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

2023-11-29

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

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

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

apply from: 'myPlugin.gradle'

但是,我遇到了以下错误myPlugin.gradle file:

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

这是代码myPlugin.gradle file:

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)

in build.gradle文件:我只是在做这样的事情:

//然后定义buildScript存储库和依赖项

apply from: 'myPlugin.gradle'

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

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


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

buildscript {

  repositories {
     mavenCentral()
     mavenLocal()
  }

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

}

EDIT

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

构建.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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Gradle 插件(及其依赖项)加载到 build.gradle 中? 的相关文章

随机推荐

  • 如何使用 Python urllib2 下载分块数据

    我正在尝试使用 Python 2 从服务器下载一个大文件 req urllib2 Request https myserver mylargefile gz rsp urllib2 urlopen req data rsp read 服务器
  • 在reactjs中循环获取

    所以基本上我创建了一个循环 它从数组中获取值并使用 youtube api 将这些值放入循环中 如果我从循环内访问它 youtube 链接工作正常 但在循环外 当我运行 console log urllist 时 我得到一个空数组 我想做的
  • 空手道:使用重试时有没有办法禁用日志?

    我正在使用空手道进行验证测试 我对我的一个请求设置了重试 但有时重试次数超过 100 次 这会创建大量无用的日志 每个请求上的负载相同 这让我的 CI 变得臃肿 我想减少此日志数量 也许可以仅针对此请求禁用日志 我试过了 configure
  • 在 Jackson 中反序列化 ISO8601 格式的“Zulu”时间

    我需要反序列化格式时间2016 11 28T10 34 25 097Z使用Jackson进入Java8的ZonedDateTime 我相信我正确配置了 ObjectMapper 工厂方法 Bean ObjectMapper getObjec
  • 将 Iterable 转换为 Collection 的简单方法

    在我的应用程序中 我使用第 3 方库 Spring Data for MongoDB准确地说 该库的方法返回Iterable
  • 等待unity3d中的动画完成

    我有一个动画在Update 函数 在Switch case 动画完成后 布尔值将被设置为 true My code case play animation Play play gobool true startbool false brea
  • android volley 发布二进制正文

    场景 在帖子正文中上传二进制数据 处理包含 JSON 的响应正文 如何使用 Volley 执行以下操作 curl X POST H X Application Id 3KxPB H X REST API Key jkuI9 H Conten
  • 在 React-Router 中使用 Link 传递 props

    你好 我正在尝试将 Props 传递给Details带有 React Router 的 Link 组件的组件 我不想显示Detail页面上的组件 它应该在单击按钮时呈现 但当新组件呈现时 url 也应该类似于 details KvhNJec
  • 用于非游戏相关 3D 图形编程的托管 Direct3D 或 XNA?

    哪种是进行 NET 3D 图形编程的首选方法 Direct3D 或 XNA 似乎是当前的技术 但哪一种最适合非游戏相关的编程 另外 Managed Direct 3D 是否已经停止 XNA 似乎并不真正适合非游戏开发 是的 可惜 MS 停止
  • Windows 7 任务栏中的 Delphi 窗体图标模糊

    I have an application having 2 Forms each Form and Application have individual Icon On Form1BitBtn1 Click Form2 is Shown
  • 如何在 webview2 中检测鼠标点击 (c#/vb.net)

    我尝试获取 html 元素的单击事件 我使用的网络浏览器 instance Nothing instance WebBrowser1 Document AddHandler instance Click AddressOf Document
  • 在代码隐藏中绑定动态创建的控件

    我动态创建了在运行时在 C 代码后面创建的弹出窗口 其中填充了 xaml 中的内容 并且很难在后面的代码中绑定它们 现在 当它被创建时 它会循环遍历 xaml 中的项目并为每个项目创建一个关联的复选框 ListView listView n
  • 是什么使

    周围似乎有某种魔力
  • 无法获取移动服务的位置信息 - 错误 400

    我尝试按照 Scotts 在此页面上对 Azure 的介绍进行操作 https www windowsazure com en us develop mobile tutorials get started 但在第 4 点 当我打算创建新的
  • Mysql 查询 - 使用 join/union 等

    我的数据库中有 4 个表 名为顾客 保存他们的个人详细信息以及他们在哪个项目中的哪个房间 payments 持有该项目的付款详细信息 projects 持有项目详细信息 和staff 持有员工登录信息 我还有 3 个页面 我从所有这些页面中
  • mysql命名约定

    我通常总是使用某种Hungarian Notation对于我的表中的字段名称 例如 Table Users u id u name u email etc Posts p id p u id p title p content etc 但最
  • Node.js Express:对 ejs 模板感到困惑

    我把我的ejs模板文件在views文件夹如 views foo html layout html 所以我配置我的 ejs 模板 app set views dirname views app engine html require ejs
  • 施工期间的虚拟功能解决方法

    我有一个具有虚函数的基类 我想在构造过程中调用该类 因为我希望为每个派生类调用该函数 我知道我无法在构造过程中调用虚拟函数 但我想不出一个优雅的 即避免重复代码 解决方案 在构造过程中调用虚函数有哪些解决方法 我想避免这种情况的原因是因为我
  • 如何在 html 页面中创建“转到邮箱”链接?

    我正在创建一个确认页面 其中显示 验证电子邮件已发送到您的邮箱 电子邮件受保护 请点击
  • 如何将 Gradle 插件(及其依赖项)加载到 build.gradle 中?

    我有一个有两个 gradle 文件的项目 build gradle and myPlugin gradle The myPlugin gradle实现了插件接口 该插件还依赖于osDetector gradle 插件 我将两个 gradle