如何在自定义gradle插件中获取project.sourceSets.test.runtimeClasspath

如何在自定义gradle插件中获取project.sourceSets.test.runtimeClasspath,gradle,groovy,Gradle,Groovy,我想创建gradle插件,它将添加额外的任务,类型为JavaExec 我有一个插件: class CustomPlugin implements Plugin<Project> { @Override void apply(Project project) { project.task('generate', type: JavaExec) { main = 'some.package.ClassWithMainInTestScope' ar

我想创建gradle插件,它将添加额外的任务,类型为JavaExec

我有一个插件:

class CustomPlugin implements Plugin<Project> {
  @Override
  void apply(Project project) {

    project.task('generate', type: JavaExec) {
      main = 'some.package.ClassWithMainInTestScope'
      args = ['some', 'arguments']
      classpath project.sourceSets.test.runtimeClasspath
    }
  }
}
问题是:如何在插件中获取project.sourceset

试试看:

    final JavaPluginConvention javaPlugin = getProject().getConvention().getPlugin(JavaPluginConvention.class);
    final SourceSetContainer sourceSets = javaPlugin.getSourceSets();
    final SourceSet smoketest = sourceSets.findByName("smoketest");
    this.testClasspath = smoketest.getRuntimeClasspath();
它工作

我喜欢这样:

project.task('generate', type: JavaExec) {
      doFirst {
        def javaPluginConvention = project.getConvention().getPlugin(JavaPluginConvention)
        classpath javaPluginConvention.getSourceSets().findByName("test").getRuntimeClasspath()
      }

      main = 'some.package.ClassWithMainInTestScope'
      args = ['some', 'args']
    }
一切都好

project.task('generate', type: JavaExec) {
      doFirst {
        def javaPluginConvention = project.getConvention().getPlugin(JavaPluginConvention)
        classpath javaPluginConvention.getSourceSets().findByName("test").getRuntimeClasspath()
      }

      main = 'some.package.ClassWithMainInTestScope'
      args = ['some', 'args']
    }