我有一个简单的数据库迁移 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)
:在我的主要方法末尾添加显式似乎可以解决问题。为什么仅在这种情况下就需要这样做?