我想编写一个自定义插件,该插件应定义自己的测试任务。该任务应具有常见测试任务的属性,但要做一些额外的工作。
我的任务类如下所示:
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.testing.Test
class MyTestTask extends Test {
@TaskAction
def intTest() {
dosomething()
}
}
我的应创建此任务的插件类如下所示:
import org.gradle.api.Plugin
import org.gradle.api.Project;
class JavaProjectPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
project.plugins.apply('java')
project.task('myTest', type: MyTestTask)
doMoreStuff()
}
}
但是,当我尝试执行应用此插件的项目时,出现以下错误:
Caused by: java.lang.ClassNotFoundException: org.gradle.api.tasks.testing.TestFilter
at java.net.URLClassLoader.findClass(URLClassLoader.java:588)
at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:756)
at java.lang.ClassLoader.loadClass(ClassLoader.java:733)
at java.lang.ClassLoader.loadClass(ClassLoader.java:703)
... 232 more
我会错过某些东西吗,还是必须做完全不同的事情?
在用gradle 1.9构建插件之后,我得到了这个stacktrace:
Caused by: java.lang.NoSuchMethodError: org/gradle/api/tasks/testing/Test.<init>()V
at com.ibm.gradle.MyTestTask.<init>(MyTestTask.groovy)
at com.ibm.gradle.MyTestTask_Decorated.<init>(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:68)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:529)
at org.gradle.api.internal.DependencyInjectingInstantiator.newInstance(DependencyInjectingInstantiator.java:62)
at org.gradle.api.internal.ClassGeneratorBackedInstantiator.newInstance(ClassGeneratorBackedInstantiator.java:36)
at org.gradle.api.internal.project.taskfactory.TaskFactory$1.call(TaskFactory.java:124)
... 218 more
最佳答案
您能否检查一下是否在运行时使用gradle 1.2?
您可以在gradle 1.12中生成插件,但在运行时将其与较低版本一起使用
关于groovy - 从测试扩展编写gradle任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24531915/