我有一个简单的数据库迁移JavaExec任务,该任务在gitlab的构建过程中运行Java类。我有许多运行相同代码的微服务。出乎意料的是,我的一项服务突然停止了构建,陷入了这一迁移步骤。任务如下所示:
task dbMigrate(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'com.blah.Migration'
doFirst {
println "Starting dbMigrate"
}
doLast {
println "dbMigrate finished"
}
}
该类如下:
public static void main(String[] args) {
AnotherClass.main(args);
System.out.println("@Migration: complete");
}
有趣的是,这是输出:
Starting dbMigrate
@Migration: complete
主类结束,最后一行打印完成,但是我从未收到“ dbMigrate完成”日志,并且构建永久挂起。
更新:在我的主要方法的末尾添加一个明确的System.exit(0)
似乎可以解决此问题。为什么仅在这种情况下有必要这样做?