我想创建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']
}
一切都好!