Java webcontext的Gradle测试任务无法使用实体

Java webcontext的Gradle测试任务无法使用实体,java,eclipse,hibernate,gradle,testng,Java,Eclipse,Hibernate,Gradle,Testng,我对一些应该运行测试的gradle任务有问题。因为这是ant任务的遗留问题,所以我们不想将它们包含到我们的测试套件中。特别是考虑到那些ant版本在testng中,而那些由我们制作并定期使用的是使用spock和junit制作的 问题是,这些测试使用了一些上下文,当我在eclipse IDE下运行这些测试时,这些上下文运行得非常好,但如果我尝试执行以下操作,则会失败: task testNgTesting(type: Test, dependsOn: testClasses){ useTes

我对一些应该运行测试的gradle任务有问题。因为这是ant任务的遗留问题,所以我们不想将它们包含到我们的测试套件中。特别是考虑到那些ant版本在testng中,而那些由我们制作并定期使用的是使用spock和junit制作的

问题是,这些测试使用了一些上下文,当我在eclipse IDE下运行这些测试时,这些上下文运行得非常好,但如果我尝试执行以下操作,则会失败:

task testNgTesting(type: Test, dependsOn: testClasses){
    useTestNG()
    includes = ["**/*IT*"]
}

但当我尝试使用该任务时,会出现类似“org.hibernate.MappingException:Unknown entity:”或“java.lang.IllegalArgumentException:No query defined for the name”的错误,实际上问题更严重。Gradle正试图变得聪明,它从定义的任何文件夹将类文件放入类文件夹,将所有其他文件放入资源。加载persistence.xml时,它会扫描以类路径根开始的注释实体,以查找它所在的文件夹(即build/resources/main)。因为所有这些类都在build/classes/main中,所以无法找到它们。我所做的变通方法是引入两个复制任务。一个名为persistence.xml的文件正在将persistence.xml复制到classes文件夹中,另一个名为persistence.xml的文件在测试完成后将此文件移回资源。您可能需要使用类似
testNgTesting.finalizedBy(cleanAfterIntegrationTests),以确保即使某些测试失败也会进行清理。

请尝试
包括['**/*IT*']
包括'**/*IT*'
,不幸的是,这不起作用。我的意思是上下文正在运行,测试也在运行。问题是,他们在上面的消息中失败了。我认为您缺少运行测试所需的一些资源。这些应该被映射到
sourceset{test{resources{srcDir…}}}
@Radim最后我在互联网上找到了一些帮助,显然它缺少一些资源。这个问题在gradle dev论坛上讨论过,他们知道这个问题,但并没有就如何解决这个问题得出任何结论。无论如何,我找到的解决办法就在我的答案中:)