【问题标题】:Unable to use outside dependencies within custom gradle plugin implementation无法在自定义 gradle 插件实现中使用外部依赖项
【发布时间】:2019-07-01 19:40:41
【问题描述】:

在我正在构建的自定义 gradle 插件中尝试使用外部依赖项时,我无法在任何方面导入或使用它们。

我尝试在构建脚本和正常依赖项中指定我的依赖项。我正在使用 Gradle 5.5(包装脚本),并且正在使用 buildSrc 方法编写自定义 gradle 插件。

// Necessary if loading custom plugins
apply plugin: 'java-gradle-plugin'

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.google.code.gson:gson:2.8.5'
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'

group 'com.foo'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
    jcenter()
}

gradlePlugin {
    plugins {
        greeterPlugin {
            id = 'com.foo.dbcreation-plugin'
            implementationClass = 'com.foo.dbcreation.DbCreation'
        }
    }
}

dependencies {
    compile 'com.google.code.gson:gson:2.8.5'
}

【问题讨论】:

    标签: java gradle groovy build.gradle gradle-plugin


    【解决方案1】:

    我在这里看到了很多问题。

    1. buildscript 不控制插件实现的依赖关系。
    2. 使用plugins {} DSL 块来应用插件。这是首选方式:https://docs.gradle.org/current/userguide/plugins.html#sec:plugins_block
    3. 应该使用implementation 而不是compile,因为compile 已被弃用,如https://docs.gradle.org/current/userguide/java_plugin.html#tab:configurations 中所述

    话虽如此,你的 Gradle 文件应该是这样的:

    plugins {
        id 'java-gradle-plugin'
        id 'eclipse'
        id 'idea'
    }
    
    group 'com.foo'
    
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    
    repositories {
        mavenCentral()
        jcenter()
    }
    
    gradlePlugin {
        plugins {
            greeterPlugin {
                id = 'com.foo.dbcreation-plugin'
                implementationClass = 'com.foo.dbcreation.DbCreation'
            }
        }
    }
    
    dependencies {
        implementation 'com.google.code.gson:gson:2.8.5'
    }
    

    【讨论】:

      【解决方案2】:

      我弄清楚我的问题是什么。对于使用 buildSrc 目录构建的项目,您需要将 build.gradle 文件驻留在该目录而不是根项目目录(build.gradle 通常位于该目录)中。我刚刚将项目转换为普通的 gradle 项目,它工作得很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-23
        • 1970-01-01
        • 2013-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-21
        相关资源
        最近更新 更多