自从泓水之败以后,宋国就一直不得不屈服于楚国。现在,晋文公纳襄王于王城之后,宋成公觉得晋国有实力对抗楚国,便仗着自己的老爸宋襄公当年曾经厚待过流亡的晋文公,决定背楚附晋了。
齐桓公死后,中原已经没有势力能抗衡楚国,楚成王重新燃起了称霸中原的希望,此时形势一片大好,当然不能允许宋国这样的背叛行为存在,于是命令楚国的令尹子玉(成得臣)和司马子西(斗宜申)在周襄王十八年(晋文公三年,鲁釐公二十六年,前634年)的冬天率军伐宋,包围了缗(今山东济宁金乡县东北)。第二年冬天,又联合陈、蔡、郑、许包围了宋国的都城。
宋成公害怕了,赶忙派伯父公孙固,也就是那个数次劝谏宋襄公的目夷,到晋国去求救。晋文公犹豫不决。先轸(zhěn)劝他说:“出兵解除宋国的危难,是一个既能报答恩情,又能立威称霸的好机会。”晋文公也觉得有道理,但又担心干不过楚国,所以一时拿不定主意。不过,其实自从周襄王七年(晋惠公六年,鲁釐公十五年,前645年)“作爰(yuán)田”和“作州兵”以后,晋国的政局基本还算稳定,国力得到了很大发展,完全有能力跟楚国在中原一较高下,对此晋文公不可能心里没数,所以他的担忧到底出自什么心理,我们很难揣摩。
是狐偃打消了晋文公的担忧。他对晋文公说:“曹国刚刚跟楚国结盟,卫国刚刚跟楚国通婚,先攻打这两个国家,楚国不能不救,自然也就解了宋围。”当年晋文公流亡的时候,曹、卫两国都曾无礼于他,而楚成王却对他礼遇有加。打曹、卫这两个国家,既能出当年的恶气,又能避免跟有恩且强大的楚国交战,还能帮助同样有恩的宋国,是个一箭三雕的好办法。于是晋文公以打猎的名义进行军事演习,并乘机进行扩军,把他老爸晋献公扩编的上下二军继续扩编为上中下三军,每军设置将、佐各一人,以中军将为正卿,中军佐为次卿,余者为下卿,建立了晋国著名的“三军六卿”制度。
周襄王二十年(晋文公五年,鲁釐公二十八年,前632年)春,晋国做好了军事准备,打算借道于卫伐曹。不知道是不是吸取了假道灭虢(guó)的教训,卫国没有同意。晋军便假装绕道进攻曹国,但却在进入曹国后不远就乘卫国不备,攻取了卫国的五鹿(或今河南濮阳濮阳县北,或说今河北邯郸大名县东)。
攻下五鹿之后,晋国没有着急扩大战果,而是开始谋求跟齐国的联盟。由于在这之前卫国背齐附鲁,齐国因此和鲁国、卫国打了好几仗,鲁国还借助楚国的军队攻占了齐国的谷邑(今山东聊城东阿县),所以这个时候齐晋一拍即合,结成了同盟。
齐晋结盟后卫成公害怕了,请求也参加这个联盟。照理说,晋国的主要对手是楚国,这个时候完全应该接受卫国的求和,而不该过多树敌,可是不知道晋文公是怎么想的,竟然没同意,让人不得不怀疑他是动了独吞曹、卫的心思。
这一来卫成公更害怕了,又打算回过头去继续抱楚国的大腿,但卫国人却不乐意,便驱逐了卫成公。楚国闻讯派兵来救,“不克”,晋文公就这样轻易取得了卫国,可见对于一个弱国来说,只要是被人盯上了,借不借道都难逃灭亡的命运。
晋文公随即挥师攻曹。曹国比卫国有刚,进行了坚决的抵抗。晋军伤亡很大,曹国人有些得意忘形了,把晋军没来得及收走的尸体弄到城上进行凌辱。这引起了晋军的公愤,纷纷要求移军到曹国的坟地去。曹国人害怕被晋军挖了祖坟,只好把晋军的尸首棺殓了还给晋军,士气由此开始低落,终于被攻破了城池,偷窥癖曹共公也做了俘虏。
这一次,楚成王没像救卫那样派兵救曹,而是加紧了对宋国的进攻。宋国情况危急,再次派人向晋文公求救。晋文公却犯了难,一则不想失去宋国这个盟友,二则对楚国着实忌惮。先轸说:“可以分一些曹、卫的土地给宋国,让宋国用这些土地请齐国和秦国出面跟楚国讲和。我们不想失去宋国,楚国也不想失去曹、卫,所以楚国一定不会同意。这样,齐国和秦国由于楚国的原因得不到好处,便会出兵跟我们一起与楚国作战。”晋文公大喜,便分了一些土地给宋国,结果果如先轸所料,齐、秦终于决定出兵跟楚国作战了。
到这个时候,曹、卫灭亡,宋、齐、秦都站到了晋国一边,鲁国则改变了最初附楚的政策,保持中立谁都不得罪,楚国陷入了孤立的境地,只剩下郑、陈、蔡、许这些实力很弱的盟友。楚成王也感到形势不妙,便萌生了知难而退的意思,命令子玉撤围退军,同时命令在齐国谷邑的占领军也撤回来。可是子玉来了犟脾气,非要跟晋军打一仗不可。楚成王虽然很生气,但却出人意料的没有制止他,反倒又给了他一部分军队。
子玉先派遣使者宛春去见晋文公,说:“如果晋国让曹、卫复国,作为交换,楚国将会解除对宋国的围攻。”对楚国的这个建议,先轸分析说:“答应楚国,宋、曹、卫三国只会感谢楚国,不会感谢我们;不答应楚国,那就等于放弃了宋国,宋、曹、卫又都会怨恨我们。我们是为了救宋才来的,现在有了占领曹、卫的好处就放弃宋国,将来该如何面对其他诸侯呢?不如扣留宛春封锁消息,私下许诺曹国和卫国让他们复国,这样曹、卫便会感激我们而背叛楚国。子玉生气了一定会来攻击我们,等打败了他们就好办了。”
晋文公依计行事,曹、卫果然跟楚国决裂了。子玉大怒,撤宋围而进攻晋军。晋文公却并不应战,下令让部队撤退。这表面上看是为了兑现当年许下的“退避三舍”的诺言,但实际上更可能是个诱敌深入之计,因为晋军是退到城濮(今山东菏泽鄄城县西南)跟宋、秦、齐的军队会合去了。
子玉不顾众人不要追击的建议,一路追到城濮。这个时候,楚军已经成了孤军深入之势,可是不知道子玉是没掌握秦国和齐国已经参战的敌情,还是狂妄得失去了理智,似乎根本没有意识到自己陷入了险境。他派人给晋文公下战书说:“请允许我们双方的士兵在这里愉快的玩耍一下,您可以跟我一样倚着战车前的横木来观赏。”晋文公派人回复道:“我因为感念你们国君的恩德,所以才退让到这里。本以为你不会以大夫的身份来逼迫我这个国君,没想到你还是那样做了。既然这样,那么就请做好战斗准备,不要玩忽你们国君给你的使命,明早战场上见吧。”
第二天,两军开战。晋国下军佐胥臣率先强攻做为楚国右军的陈、蔡军队。陈、蔡军队实力太弱,根本不能抵挡,楚国右军被击溃。晋国上军将狐毛则采取了相反的战术。他命令树起两面大旗假装撤退,下军将栾枝为了配合狐毛迷惑敌人,也命令部下用战车拖着树枝扬起烟尘,伪装成下军也已经战败正在逃跑的样子。楚国左军果然上当,开始全力追击当面的晋国上军,结果遭到由先轸和郤溱(xì qín)率领的晋国中军的侧击,混乱中,狐毛和狐偃率领晋国上军反杀回来,结果楚国左军抵挡不住晋国上、中两军的夹击,也溃败了。幸亏子玉见势不妙,急忙收束军队停止进攻,这才保住了楚国中军,没有招致彻底的失败。
城濮之战是春秋时期规模最大的一场战争,黄河中下游地区的陈国、蔡国、许国、郑国、鲁国、宋国、卫国、曹国、齐国等主要诸侯国都先后卷入了其中,甚至连远在关中地区的秦国都参战了,算上对阵的主要力量晋国和楚国,参战国达到十二个之多。
在这场大战中,楚成王政令不明,外交上始终处于被动孤立的窘境,而在战与不战上又举措失当,在不利形势下没能贯彻退军避战的决心,是导致失败的主要原因。虽然刚愎自用的令尹子玉也应该负有一定的责任,但他毕竟保全了中军,没使楚军受到毁灭性的打击,可是楚成王却不管这些,立即派了个使者去责问子玉将以什么面目回来见家乡父老。这话太重了,任谁都会理解成楚成王是不想让自己回去了。子玉没有办法,只好自杀。等楚成王意识到自己说了过头话,又派使者去制止他自杀的时候,时间已经来不及——他到底是干了件亲者痛仇者快的事。
从楚成王在城濮之战中的表现以及子反之死来看,他之所以在跟齐桓公和晋文公的争霸中两次落败,不是没有原因的。这次失利,让楚成王争霸中原的野心再一次遭到挫败,此后只能转而经营南方,把中原的霸权拱手让给了晋文公。