build - Gradle里程碑4/5在具有插件实例化异常的测试中失败

标签 build junit gradle

我使用gradle进行了非常复杂的构建-带有许多自己的gradle插件。这些插件已经过全面的单元测试,但是从Gradle-1.0-milestone-4开始,似乎无法从单元测试中实例化这些插件。我遵循了标准的gradle方法(取自http://gradle.org/current/docs/userguide/custom_plugins.html):

class GreetingPluginTest {
    @Test
    public void greeterPluginAddsGreetingTaskToProject() {
        Project project = ProjectBuilder.builder().build()
        project.apply plugin: 'greeting'

        assertTrue(project.tasks.hello instanceof GreetingTask)
    }
}

当我使用gradle 1.0-milestone-3运行测试时,它们都工作正常(我只使用了Milestone-3中的gradle二进制文件,一切都很好)...。

在里程碑4/5中,出现以下错误。似乎gradle在内部使用了不同的classloader来加载类,但是如何使它使用正确的classloader?

错误:
org.gradle.api.plugins.PluginInstantiationException: Could not find implementation class 'null' for plugin 'polidea-project-configuration' specified in file:/Users/potiuk/Documents/workspace/PolideaBuildPlugin/bin/META-INF/gradle-plugins/polidea-project-configuration.properties.
    at org.gradle.api.internal.plugins.DefaultPluginRegistry.getTypeForId(DefaultPluginRegistry.java:102)
    at org.gradle.api.internal.plugins.DefaultPluginRegistry.getTypeForId(DefaultPluginRegistry.java:76)
    at org.gradle.api.internal.plugins.DefaultProjectsPluginContainer.getTypeForId(DefaultProjectsPluginContainer.java:102)
    at org.gradle.api.internal.plugins.DefaultProjectsPluginContainer.apply(DefaultProjectsPluginContainer.java:37)
    at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyPlugin(DefaultObjectConfigurationAction.java:101)
    at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:32)
    at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:72)
    at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:114)
    at org.gradle.api.internal.project.AbstractProject.apply(AbstractProject.java:841)
    at org.gradle.api.Project$apply.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at pl.polidea.gradle.BaseTaskTest.getProject(BaseTaskTest.groovy:14)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:267)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:52)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:137)
    at pl.polidea.gradle.TestBasicBuildTasks.testBuildTasksAvailable(TestBasicBuildTasks.groovy:11)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at junit.framework.TestCase.runTest(TestCase.java:168)
    at junit.framework.TestCase.runBare(TestCase.java:134)
    at junit.framework.TestResult$1.protect(TestResult.java:110)
    at junit.framework.TestResult.runProtected(TestResult.java:128)
    at junit.framework.TestResult.run(TestResult.java:113)
    at junit.framework.TestCase.run(TestCase.java:124)
    at junit.framework.TestSuite.runTest(TestSuite.java:243)
    at junit.framework.TestSuite.run(TestSuite.java:238)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: pl.polidea.gradle.plugins.ProjectConfigurationPlugin not found.
    at org.gradle.util.MultiParentClassLoader.loadClass(MultiParentClassLoader.java:51)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at org.gradle.api.internal.plugins.DefaultPluginRegistry.getTypeForId(DefaultPluginRegistry.java:100)
    ... 42 more

最佳答案

如评论。我直接使用了类,它像这样工作:

project.project.plugins.apply(SomePlugin.class)
project.project.plugins.apply(SomeOtherPlugin.class)

关于build - Gradle里程碑4/5在具有插件实例化异常的测试中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8021341/

相关文章:

java - JUnit 不显示 ExpectedException 消息

java - 有没有办法在测试环境中运行 junit/TestNG 测试用例?

jenkins - 如何根据个别测试结果在Jenkins管道作业中设置slackSend?

gradle - Gradle:我如何依赖资源任务对象?

c++ - 如何使用 Visual Studio 2008 构建 libevent 版本 2.0.10

c++ - CMake add_executable() 使用 .cpp 文件还是 .hpp 文件?

java - 如何为创建新对象的 void 方法编写 junit 测试用例

android - 在libgdx游戏中配置groovy时出错

c++ - 使用 CMake 仅构建一次外部库

java - Ant构建文件问题