我有一个非常标准的Gradle构建,它正在构建一个Java项目。
当我第一次运行它时,它编译所有内容并运行测试。当我第二次运行它而不更改任何文件时,它再次运行测试。
根据this thread,Gradle默认应该是懒惰的,如果什么都没有改变,就不需要运行测试。这里的默认行为是否改变了?
编辑:
如果我重复运行gradle test
,测试只会在第一次运行时被跳过。但是,如果我重复运行gradle build
,测试每次都会重新运行,即使所有其他任务都标记为最新。
我有一个非常标准的Gradle构建,它正在构建一个Java项目。
当我第一次运行它时,它编译所有内容并运行测试。当我第二次运行它而不更改任何文件时,它再次运行测试。
根据this thread,Gradle默认应该是懒惰的,如果什么都没有改变,就不需要运行测试。这里的默认行为是否改变了?
编辑:
如果我重复运行gradle test
,测试只会在第一次运行时被跳过。但是,如果我重复运行gradle build
,测试每次都会重新运行,即使所有其他任务都标记为最新。
3条答案
按热度按时间bz4sfanl1#
好吧,我得到了答案感谢Rene prompting me to look at the '-i' output。
我实际上有两个测试任务:来自Java插件的“测试”任务,以及我自己的“集成测试”任务。我没有在问题中提到这一点,因为我认为这无关紧要。
事实证明,这些任务将其输出(报告等)写入同一个目录,因此Gradle基于任务的输入和输出跟踪认为发生了变化,并重新运行测试。
因此,next question是如何干净地-并且使用最少的Groovy/Gradle代码-分离测试任务的两个示例。
k4ymrczo2#
gradle uptodate
检查在信息级别上记录为什么任务不被认为是最新的。请在检查日志输出时将gradle build -i
设置为使用信息日志运行。af7jpaap3#
您需要在build.gradle中创建测试任务,然后调用这些特定的任务来运行特定的测试集。下面是一个示例,它将过滤掉类,以便它们不会被运行两次(例如当运行一个套件时,然后独立地重新运行它的子类):
字符串
另外,关于你的构建问题。“构建”任务包括一个清理步骤,即从你的构建目录中清理测试。否则执行会认为测试已经运行。