我正在用 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?
}
}