0

我正在用 Groovy 编写一个预构建 Gradle 插件。我的项目结构如下:

+ buildSrc
| + src
| |  - main
| |     - groovy
| |        - org
| |           - domain
| |              + MyPlugin.groovy
| |              - MyPluginTask.groovy
| - build.gradle
+ build.gradle
- settings.gradle  

我想要实现的是编写一个具有依赖关系的预构建插件(这就是它在 buildSrc 中的原因)。当有人使用这个插件时,不需要自己下载这个依赖项。该插件将定义一个任务,该任务将从这个外部依赖项执行一个 Java 类。

我的buildSrc/build.gradle

plugins {
    id 'groovy-gradle-plugin'
}

group = 'org.domain'
version = '0.1.0'

repositories {
    mavenCentral()
}

dependencies {
    implementation group: 'org.example', name: 'external-package', version: '1.0.0'
}

gradlePlugin {
    plugins {
        myPlugin {
            id = 'org.domain.my-plugin'
            implementationClass = 'org.domain.MyPlugin'
        }
    }
}

我的build.gradle

plugins {
    id 'org.domain.my-plugin'
}

我的问题是,从网上找到的示例和代码中,我看到我需要使用sourceSets.main.classpath. 问题是,它在 Groovy 类中不可用。我看到它只能从 DSL 获得。我看到有人从项目约定中使用它,但根据 Gradle 文档,该约定已被弃用,不应使用。

我的MyPluginTask.groovy

package org.domain

import org.gradle.api.tasks.JavaExec;

class MyPluginTask extends JavaExec {

    public MyPluginTask() {
        setGroup("MyPlugin");
        setDescription("My plugin description");
        // from what I understand I need to set a classpath here, but I don't know how to do it
        // setClasspath(' ????? ');
        mainClass.set("org.example.external-package.Main");  // <-- this is what I understand I need to do?
    }
}
4

0 回答 0