周襄王十四年(前638年),楚国在泓之战中击败宋国,欲与楚成王争夺天下霸权的宋襄公身受重伤,拖了一年多便不治而死。此时,齐国在齐桓公死后国力衰落,秦国则偏处西隅,还在发展壮大当中,均无力对抗楚国。而郑、许、陈、蔡、鲁、卫、曹等中小诸侯国慑于楚国的军威,更是纷纷向其臣服效忠。楚国国势大张,楚成王一时间似乎已触碰到了诸侯霸主的宝座。
然而周襄王十六年(前636年),晋公子重耳——楚成王生命中的克星——在流亡十九年之后终于回国即位,史称晋文公。晋文公上台后,对内拔擢贤能,整顿国政,发展经济,壮大军队,对外联秦合齐,尊王攘楚,晋国在短短几年间就一跃成为楚国争霸的最强劲对手。晋楚之战一触即发,势所难免。
周襄王十九年(前633年),楚国会同陈、蔡、郑、许五国军队攻打宋国,宋襄公之子宋成公向晋国求救。晋国中军元帅先轸力劝晋文公出兵救宋,说:“取威定霸,在此一战!”晋文公采纳了他的建议,决定出兵。随后他扩编三军,任命将领,亲率大军出征,拉开了晋楚大战的序幕。
晋军倾巢而出,但并不是直接援助宋国,而是去讨伐楚国的同盟国曹国和卫国。晋国君臣的计划是,引诱楚军北上救援曹、卫,这样既可解宋国之危,又能以逸待劳,占据主动。然而楚军并不上钩,继续猛攻宋国。这时,以谋略见称的优秀军事将领先轸再次向晋文公献计:“让宋国用重金贿赂齐、秦二国,请齐、秦劝楚退兵。
眼看就要打下宋国的楚国必然不听他们的劝解,如此一来齐、秦必怨怒楚国,而坚定地站在我们一边。同时我们可以承诺将打下的曹、卫部分土地分给宋人,以坚定宋国抗楚的决心。”
晋文公依计行事。果然,楚成王拒绝了齐、秦两国的调停,齐、秦恼怒楚国不买他们的面子,随即与晋国结成联盟。同时,晋军也已攻破了曹、卫两国。楚成王见中原形势已变,就命令攻宋总指挥楚令尹子玉撤军回国,日后再寻战机。
但子玉一向骄横,不听楚成王劝告,坚持要与晋国交战,并要求楚成王派军增援。楚成王犹豫再三,派了少数援军给他,心想如果战胜晋国最好不过,如果战败,也可借机除掉这个不听话的权臣。
当然,子玉虽然狂傲,但并非无谋之辈。为求胜利,他派使者宛春向晋文公提出了一个“晋许曹、卫复国,楚解宋国之围”的休战条件。先轸认为,子玉的这个计划是一石二鸟之策。
如果晋国答应他的要求,则曹、卫、宋三国都会感激楚国;如果不答应他的要求,那么三国将会怨恨晋国。同时,晋国是以救宋的借口出的兵,从而占了曹、卫,如果不答应子玉的提议而导致宋国被灭,那就于理不合,国际舆论将不利于晋国。
于是,晋文公接受先轸的建议,私下允许曹、卫复国,曹、卫两国则答应与楚断交。同时,晋国扣下楚使宛春以激怒子玉。子玉不能忍受这种挑衅,立即挥军北上,来攻打驻扎在曹都陶丘的晋军。
晋文公见楚军逼近,下令全军退避三舍(即九十里)。众人不解,问他为何退兵。晋文公解释说:“当年我逃难经过楚国,楚成王曾经好酒好肉招待过我。酒席上楚成王问我将来如何报答于他,我说:‘如果今后我能回晋国执政,而日后晋楚又在中原交兵,我当避君三舍。’现在就是我兑现诺言的时候了。”