公元前216年初,經過激烈的派係鬥爭以後,羅馬執政官大選塵埃落定。新當選的執政官保盧斯(L。AemiliusPaulus)和瓦羅(C。TerentiusVarro)都是堅定的主戰派,而後者跟他的前任弗拉米尼烏斯一樣,注定要為羅馬最悲壯的失敗背負罵名。
瓦羅並非元老貴族出身,而是新興貴族的一員。李維甚至說他是個屠夫的兒子,這是信口開河了,因為在注重血統和出身的古羅馬,一個屠夫的兒子是不可能當選執政官的。瓦羅此前曆任財政官、營造官、和司法官,三年前跟隨保盧斯征戰伊裏利亞(Illyria),算是有一些實戰經驗。然而在波利比烏斯筆下,瓦羅是個恬不知恥的小人,頭腦簡單,好大喜功,不聽從保盧斯的規勸而一意孤行,直接導致了坎尼戰役的慘敗。考慮到波利比烏斯的保護人小西庇阿是保盧斯的孫子,他這個寫法頗有替保盧斯推卸責任的嫌疑。
公元前216年大選結束以後,羅馬立刻著手擴軍,新建4個軍團,力圖以絕對優勢的兵力一戰打垮漢尼拔。這年春天,所有羅馬官兵宣誓如下:“絕不臨陣脫逃,除非殺敵救人、撿回武器,絕不離開隊列一步。”全體將士都做好了決一死戰的心理準備。此時羅馬軍隊序列包括16個軍團,其中2個在西班牙,2個在西西裏,2個在波河流域,2個拱衛羅馬城,4個正在前線與漢尼拔對峙。兩位執政官統帥4個新建軍團,浩浩蕩蕩向意大利半島東南部殺奔而來,打算與前線的4個軍團合兵一處,同漢尼拔決戰。
漢尼拔在戈洛尼亞冬季營地一直駐紮到5月份。這期間羅馬軍隊駐守附近的兩個營地,與漢尼拔對峙,雙方足足有半年相安無事。費邊任期結束返回羅馬以後,統帥前線部隊的是代理執政官塞維利烏斯和亞第利烏斯(M。AtiliusRegulus)。塞維利烏斯是去年的執政官,以謹小慎微著稱。漢尼拔想盡辦法引誘羅馬軍隊決戰,塞維利烏斯就是不為所動。
3月間,兩軍之間發生了一係列小規模戰鬥,似乎迦太基軍隊吃了點兒虧。李維記載漢尼拔損失三千餘人,顯然是誇大其詞了。漢尼拔馬上抓住這個機會設置陷阱。這天晚上,漢尼拔突然率領大軍棄營而走,丟下大量財寶輜重,似乎打算逃跑。羅馬軍隊聞訊立刻趕到,準備奪占大營。不用說這又是漢尼拔的計策,他的大軍潛伏在周邊的山巒樹林裏,隻等羅馬大軍入營劫掠,便乘亂殺一個回馬槍。這一次羅馬軍隊險些上當。塞維利烏斯下令進入漢尼拔大營之前,照例犧牲祭神以求預兆。結果預兆相當不妙,加上塞維利烏斯本來就疑心重重,羅馬軍隊於是收兵回營。
6月初,漢尼拔大軍糧草將盡,而周邊地區早已被搜刮一空,因此不得不向南轉戰。戈洛尼亞東南100公裏有一個小鎮,位於奧菲杜斯河(Aufidus)南岸,距離亞德裏亞海岸七八公裏,居高臨下,地勢險要。羅馬軍隊在此修築要塞,作為阿普利亞戰區的後勤基地。這個小鎮便是日後名垂千古的坎尼(Cannae)。坎尼的羅馬守軍非常虛弱,因此漢尼拔輕易破城,繳獲大量糧草,然後在城外安營紮寨。
就在漢尼拔南下的同時,兩位羅馬執政官也到達前線,八個軍團合兵一處,羅馬大營一片旌旗招展,人喧馬嘶的熱鬧景象。保盧斯召集百人隊長以上的羅馬軍官,向他們轉達了元老院的決議。為了振奮士氣,保盧斯回顧了過去的兩次戰役,解釋了失敗的原因,指出這一次羅馬軍隊準備充分,擁有二比一的兵力優勢,而且四位現任和前任執政官都加入到隊伍中來,與官兵並肩作戰。保盧斯的總結發言充滿悲壯的意味:
“你們都渴望在戰鬥中贏得勝利,倘若勝利不可得,則寧可戰死也不願看到你們最珍愛的一切遭到毀滅。因此我不必多言,隻想請諸位兩眼緊盯著勝利和失敗的天差地別,以及其種種後果。走進戰場時請記住,寄托在你們身上的是整個國家的生死存亡,而不是一支軍隊的生死存亡。如果此次決戰失敗,那麼我們的祖國就再也無力反抗強敵,因為她已將所有的力量和精神灌注在你們身上,你們維係著她唯一的希望。舍身報國的時刻已經來臨,請你們不要辜負祖國的期望。”
7月下旬,保盧斯和瓦羅統帥的八萬羅馬大軍在坎尼西北10公裏紮營。保盧斯注意到附近的地形平坦開闊,是理想的騎兵戰場。考慮到漢尼拔的騎兵優勢,保盧斯建議羅馬大軍向南移動,吸引敵軍進入奧菲杜斯河以南的山地丘陵。瓦羅卻很不以為然。由於兩位執政官隔日輪流行使統帥權,輪到瓦羅當值時,他便率軍拔營出發,向東前進,逼近漢尼拔大軍。漢尼拔派出騎兵和輕步兵襲擊行進中的羅馬軍隊,但羅馬人防範甚嚴,漢尼拔沒能占到便宜。次日,保盧斯繼續率領羅馬大軍向東前進,最終在漢尼拔大營東北方向5公裏處的奧菲杜斯河北岸安營紮寨。這個細節表明,羅馬大軍的兩位統帥在戰略方針上並沒有根本分歧。
漢尼拔得知羅馬大軍紮營以後,立刻率領主力渡河,在北岸修築一座營壘。瓦羅針鋒相對,派遣一支部隊渡河在南岸築營。現在兩軍的距離如此之近,任何一方膽怯退卻,都勢必遭到另一方的追擊掩殺,因此一場會戰不可避免,唯一的變數是時間和地點。
此時兩軍都麵臨糧草不濟的問題,因此都希望速戰速決。漢尼拔雖然繳獲坎尼要塞的存糧,但五萬大軍消耗巨大,這些糧草支持不了很長時間。由於大敵當前,漢尼拔無法分散兵力四處打糧,隻能坐吃山空。李維甚至記載,坎尼戰役之前迦太基軍隊就已經斷糧,漢尼拔的西班牙和高盧雇傭軍開始策劃逃亡。漢尼拔本人也打算帶著親信和騎兵,拋棄步兵北逃波河平原。這個故事顯得匪夷所思,而且波利比烏斯也隻字未提此事。無論如何,漢尼拔麵臨的困境是顯而易見的。羅馬軍隊也麵臨同樣難題。失去坎尼這個後勤基地以後,羅馬軍隊不得不從路途遙遠的坎帕尼亞運糧過來,而八萬大軍的日常消耗非常驚人,所以根本無法和漢尼拔長期僵持下去。
兩軍大營近在咫尺,對峙了幾天,雙方都不願輕舉妄動,等待最佳戰機。8月1日,漢尼拔采取主動,率領大軍在奧菲杜斯河北岸的羅馬大營外麵列陣挑戰。這天當值的羅馬統帥是保盧斯,他對戰場開闊平坦的地形表示憂慮,因此拒絕應戰。漢尼拔照例在羅馬大營前麵耀武揚威了一陣,向部下充分顯示對手的怯懦,然後收兵回營。
次日清晨,當值統帥瓦羅的大帳外麵高掛一麵猩紅的旗幟,這是準備戰鬥的信號。羅馬大營頓時忙碌起來,將士們心跳加速,熱血沸騰。期待已久的大決戰終於來臨。
福勒在《西方軍事史》中評價坎尼戰役,認為羅馬人的戰爭觀念非常呆板,純粹依賴士兵的匹夫之勇、紀律和操練。至於將領指揮,簡直可說是聊勝於無。羅馬統帥愚蠢無知,屢犯戰術錯誤,導致坎尼戰役失敗。這個論點頗具代表性,但顯然以成敗論英雄了。如果我們仔細考察此戰羅馬大軍的排兵布陣,會發現瓦羅的戰術部署很有針對性。
瓦羅精心選擇了戰場,以求遏製迦太基騎兵的優勢,不給漢尼拔包抄兩翼的機會。奧菲杜斯河北岸地形平坦開闊,非常適合騎兵的運動戰;南岸地形卻起伏破碎,隻有坎尼城東北一塊平原,夾在河流和群山之間,寬僅兩公裏有餘。瓦羅率領大軍渡河來到南岸,在這塊平原布陣,期待漢尼拔渡河應戰。羅馬戰陣左翼依托山地,右翼緊靠河流,沒有留給對手絲毫的迂回空間。瓦羅在北岸大營留駐了一個軍團,要求他們保護大軍的側後,如果發現敵軍渡河穿插迂回,立刻迎頭截擊。
羅馬大軍渡河以後,瓦羅擺出了一個極其厚實的步兵戰陣。按照慣例,羅馬軍團的百人隊小方陣60人,每行10人,6行縱深;此戰羅馬軍團的百人隊方陣卻是每行5人,12行縱深,方陣之間的空隙大大壓縮。如此計算,七個羅馬軍團的戰線正麵寬約1500米,三條線加起來有60行縱深。瓦羅的排兵布陣已經背離了羅馬軍團的戰術原則,類似馬其頓密集陣了。