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



我想创建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
}
}
}

我有以下错误

FAILURE: Build failed with an exception.
* Where:
Build file '/home/pompei/IdeaProjects/greetgo.depinject/greetgo.depinject.gradle/build/test_projects/pr-20180720-164840-381-109260619/test/build.gradle' line: 3
* What went wrong:
An exception occurred applying plugin request [id: 'kz.greetgo.depinject.plugin']
> Failed to apply plugin [id 'kz.greetgo.depinject.plugin']
> Could not get unknown property 'sourceSets' for root project 'test' of type org.gradle.api.Project.

问题是:如何在插件中获取项目.sourceSets

试试看:

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']
}

一切都好!

最新更新