0

我制作了一个带有任务的插件,该任务将使用 google 的 Reflections 库(此处)在类路径中搜索带有特定注释的类。但是,在使用插件并运行任务时,不会使用当前模块的类路径。如何让任务像在类路径上一样查看 jar 任务(来自 java 插件)的输出?

这是我的示例插件:

package com.myplugin;

import org.gradle.api.Plugin;
import org.gradle.api.Project;

public class MyPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {
        project.getTasks().create("myplugintask", MyPluginTask.class);
    }
}

我的任务代码:

package com.myplugin;

import lombok.Data;
import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.TaskAction;
import org.reflections.Reflections;

public class MyPluginTask extends DefaultTask {
    @TaskAction
    public void reflect() {
        Reflections reflections = new Reflections("com.consumer.reflected");

        for (Class<?> clazz : reflections.getTypesAnnotatedWith(Data.class)) {
            getLogger().info(clazz.toString());
        }
    }
}

我的消费项目有一个类:

package com.consumer.reflected;

import lombok.Data;

@Data
public class SomeClass {
}

我希望能够运行:

gradle myplugintask

并查看 SomeClass,但反射返回零结果。

注意:我尝试在消费者项目中实现插件(和任务)的实例化,并将其作为标准 jar 运行,并且成功(输出显示 SomeClass)

4

1 回答 1

2

简而言之,任务类需要一个@InputFiles Iterable<File> classpath属性,插件需要配置这个属性(例如myTask.classpath = project.sourceSets.main.compileClasspath),任务动作需要以某种方式将类路径传递给反射库。我相信你可以解决剩下的问题。

于 2014-04-08T14:59:38.693 回答