Как вызвать класс внешней библиотеки из JavaExec?

Я пишу предварительный плагин Gradle в Groovy. Моя структура проекта выглядит следующим образом:

      + 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?
    }
}

0 ответов

Другие вопросы по тегам