Как вызвать класс внешней библиотеки из 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?
}
}