罗马为什么允许迦太基人再度征服西班牙?因为罗马正为内部的阶级斗争所苦,又在亚得里亚海地区扩张势力,北方也与高卢人处于战争中。公元前232年,一位保民官盖乌斯·弗拉米纽斯(Caius Flaminius)做了格拉古兄弟土地改革的先驱,极力抵抗元老院的激烈反对,领导平民会议通过一个法案,把新近从高卢人手中得来的一些土地分给贫苦市民。罗马从公元前230年开始,进行征服希腊的第一步骤,先肃清亚得里亚海的海盗,占据伊利里亚海岸的一部分地区,作为保护意大利商业的进一步措施。南方及东方都已安全了,罗马便决心把高卢人逐到阿尔卑斯山外去,使意大利成为一个完全统一的国家。为获得西方的安全,罗马与哈斯德鲁鲍尔签订了一个条约,西班牙的迦太基人同意停留在埃布罗(Ebro)河以南地区。同时,罗马又与西班牙境内半希腊人的城市撒格尼图姆(Saguntum)和安普里阿斯(Ampurias)结为同盟。公元前225年,高卢一支大军(步兵5万和骑兵2万)南下扫荡半岛。罗马首都的居民惊骇万分,致使元老院采取以人做牺牲的人类原始习惯,在会堂前活埋了两个高卢人,以求神祇息怒。罗马军团迎战进犯的高卢军于泰拉蒙(Telamon),杀敌4万、俘敌1万,乘胜继续北上去征服南高卢全部地区。他们在三年之内,顺利完成了任务,并于普莱西阿(Placentia)和克雷莫纳(Cremona)建立了两个保护性的殖民地。于是,自阿尔卑斯山至西西里,意大利完全一统了。
这次胜利很不合时宜。倘若让高卢人多几年留在原地,不加讨伐,也许他们就会阻止汉尼拔的进军。可是现在呢,所有高卢人皆燃起了反抗罗马的怒火。汉尼拔看出其渴望的机会已到,几乎没有遭遇抵抗地通过高卢,且与高卢的若干部落结为同盟,共同侵入意大利。
这位布匿人领袖,当时已经28岁,正是体力与智力最旺盛的时期。他曾在迦太基人的士绅学校学习过语言、文学、腓尼基及希腊的历史。除此之外,他又随营接受军事训练达19年之久。他严格锻炼自己,使身体能耐劳苦,食欲有节制,保持缄默,思考客观。他跑步或骑乘都极其迅速,打猎或战斗最为勇敢。其敌国的史学家李维说:“进入战斗时他是最先一人,放弃战场时他是最后一人。”老兵都很热爱他,因为他威严的态度与锐利的目光,使他们好像看到老哈米尔卡再世了。新兵也很喜欢他,因为他穿的是与士兵一样的衣服,在安排好军队需要之前决不休息,且与士兵们同甘共苦。罗马人斥责他野蛮、残酷及没有信义,因为他夺取补给品以满足部队的需要时丝毫不受良心的谴责,而且他严厉处罚背叛者,设下许多圈套以捕捉其仇敌。可是,我们发现他时常仁慈待人,经常显示侠义风度。那位比较公正的史学家蒙森(Mommsen)说:“在当时的环境之下,依照当时的国际法,所有有关他的叙述,从没有发生过不合理之事。”罗马人不打算原谅他,因为他赢得许多会战,这完全是靠他的脑筋,而不是靠部属的生命。他对罗马人的诡计、他的侦察技术、他的巧妙战略以及他的屡次奇袭,直至迦太基被消灭的时候,始终还是罗马人所无法理解的。
公元前219年,罗马的情报人员在撒格尼图姆组织了一次武装政变,建立了一个与迦太基为敌的爱国政府。撒格尼图姆人于是侵扰与迦太基友好的许多部落,汉尼拔命令他们停止行动,而遭到拒绝,汉尼拔便围攻撒格尼图姆。罗马向迦太基抗议,并以战争相威胁。迦太基回答说,撒格尼图姆位于埃布罗河南方100英里,罗马无权干涉。至于罗马与撒格尼图姆结为同盟,那是违反罗马与哈斯德鲁鲍尔所签订的条约的。汉尼拔坚持不让,继续攻城。罗马便再度宣战,他们做梦也想不到这回的第二次布匿战争会成为罗马历史上最可怕的一次战争。
汉尼拔费时八个月,才征服撒格尼图姆。他要向意大利进军,但不敢在后方留下这么好一个港口,让罗马军队在此登陆。公元前218年,汉尼拔渡过埃布罗河,正与恺撒渡过卢比肯河(Rubicon)时一样,向命运发起挑战。他有5万步兵和9000骑兵,其中无一雇佣的兵士,多半是西班牙人和利比亚人。西班牙士兵听说要越过阿尔卑斯山远征,当即逃走了3000人。另有7000人向他抗议,指出他的冒险是不可能成功的,汉尼拔也把他们释放回去了。他率军强行通过比利牛斯山(Pyrenees),尤其出乎意料的是,有一些与马赛同盟的高卢部落,抵抗得很顽强。经过一个夏天的战斗,才到达罗讷河。而在罗讷河渡河时,还发生了一次大战。当时他刚离开罗讷河,就有一支罗马军队到达了罗讷河河口。
汉尼拔率领他的军队北进,到达维埃纳(Vienne),然后才向东进入阿尔卑斯山。在他之前,凯尔特人的军队也曾越过这些山脉,倘若不是山中的阿尔卑斯各部落(Alpine tribes)与他为敌,及他的大象通过狭小而险峻的山道特别困难,他也许会像凯尔特人一样,并无多大困难便可通过。9月初,军队登山九天之后到达最高峰,发现道路已被积雪封住。汉尼拔在这里让人及动物休息了两天,然后开始下坡行军,通过的山道比上山时更陡峻,大多道路被崩山阻塞,且常常遇到冰封的路面。有许多士兵和兽类失足翻下山去。汉尼拔替绝望的士兵打气,向他们指出,在远远的南方,就是意大利的绿野及闪烁发光的河流。他向士兵们保证,那个乐园很快就是他们的了。在阿尔卑斯山中行军17天之后,他们到达平原休息。由于在山中损失的人马过多,他的军队现在只有2.6万人了——较四个月前他们自新迦太基出发之初的人数相比,只剩下一小半。倘若内高卢人也像外高卢人那样抵抗他,汉尼拔的计划可能就到此为止了。但是,波依(Boii)人及其他高卢部落欢迎他,视之为救世主,以同盟地位参加他的军队。而最近才建立的罗马殖民,则渡过波河南逃了。
罗马面临着七年中的第二次生死存亡的威胁,元老院动员所有资源,并要求意大利各邦联合起来,以保卫其国土。罗马得到他们的协助,召集了庞大的军队,共有30万步兵、1.4万骑兵及45.6万名预备役。此军受西庇阿指挥,罗马有许多著名的西庇阿,此人是第一个。他在提契诺(Ticino)河沿岸与汉尼拔相遇,此河是波河的支流,在帕维亚(Pavia)注入波河。汉尼拔的努米底亚(Numidian)骑兵使罗马军队大败而逃,西庇阿受了重伤,他的儿子奋勇加入作战,才把他救回(他的儿子也叫西庇阿,16年后在扎马与汉尼拔再遇的就是他)。在特拉西梅诺(Trasimene)湖,汉尼拔又与另一支罗马军队相遇,此军有3万人,由保民官盖乌斯·弗拉米尼乌斯统率,且有不少奴隶买卖人随行,他们携带着手镣和铁链,希望捕捉俘虏去卖。汉尼拔以一部分兵力去诱敌,诱引罗马军队进入四围都是山林的一个平原,而汉尼拔的主力部队则隐藏在山林中。待他信号一举,伏兵齐出,四面进攻罗马军队。罗马军几乎全部被歼,包括其指挥官弗拉米尼乌斯。当时是公元前217年。
现在,汉尼拔已经控制了意大利北部。但他知道,这个意志坚定的敌人,兵力比他强大十倍。他的唯一希望,是说服意大利各邦,至少也要说服其中的一部分,起而反叛罗马。他把所俘的罗马同盟官兵一齐释放,对他们说,他这次到来,不是与意大利作战,而是要解放他们,使其自由。他行军于洪水泛滥的埃特鲁里亚地区,在那里,四天找不到一块陆地扎营。然后率军越过亚平宁山脉,到达亚得里亚海岸,作长时间的休息,使士兵恢复体力,并治疗伤患。他自己患有严重的眼疾,因为没有时间医治,一目失明。接着,他就沿着东海岸南下,邀请意大利各部落参加他的阵营,但没有一个部落响应。相反,每一座城市皆闭门拒绝,并准备战斗。他的高卢盟军,只关心其北方的家,当汉尼拔南进时,便开始逃亡。暗杀他的阴谋也很多,使他不得不时常伪装。他请求迦太基政府利用亚得里亚海港口,输送补给品及兵员给他,遭到迦太基政府的拒绝。他要求留在西班牙的弟弟哈斯德鲁鲍尔组织一支军队,越过高卢及阿尔卑斯山,与他会合。但是,罗马军队已侵入西班牙,哈斯德鲁鲍尔不敢离开这里。直到十年之后,他才前来。
罗马已经采取了阻碍政策,以对付其最顽强的敌人。公元前217年,法比乌斯(Quintus Fabius Maximus)成为独裁者,他尽量避免与汉尼拔直接交战。他相信,时候一到,侵略军必因饥饿、不和及死亡而减弱。一年之后,这种“巧妙的避战”使罗马人大为恼怒,平民会议不顾元老院的决定,也不顾前例及论理,选举米努西乌斯·鲁福斯(Minucius Rufus)同为独裁者,与法比乌斯共同指挥。米努西乌修斯不理会法比乌斯的忠告,径向敌人进军,结果落入敌人陷阱而惨败。自此以后,才了解为什么汉尼拔会说:“我只害怕法比乌斯的不战,而不怕马赛勒斯(Marcellus)的出战。”一年后,法比乌斯被罢免,罗马军队交给保卢斯(Lucius Aemilius Paulus)和瓦罗(Caius Terentius Varro)二人指挥。贵族出身的保卢斯主张谨慎,平民出身的瓦罗力主作战。与一般常例相同,谨慎论总是辩不过对方的。瓦罗搜索敌情,发现迦太基军队在阿普里亚(Apulia)的坎尼,距离亚得里亚海岸约10英里。罗马军队有8万步兵和6000骑兵。而汉尼拔只有1.9万名老兵,另有靠不住的高卢兵1.6万及骑兵1万人。汉尼拔把瓦罗引诱到一个广阔的平原地去作战,那是骑兵的理想战场。汉尼拔把高卢兵置于中央,料想他们必定败退。高卢兵果然后退,罗马军在其后跟进,这位巧妙的迦太基指挥官命其老兵包围罗马军的两翼,又命骑兵击破对方的骑兵,从罗马军团后面进攻。罗马军被包围,完全不能动弹,几乎全数被歼,死亡人数达4.4万人,包括保卢斯及从军的80位元老院的元老。有1万人逃往卡流苏门(Canusium),其中有瓦罗及后来绰号为“大阿菲利加”(Africanus Major)的西庇阿(坎尼之战在公元前216年)。汉尼拔损失6000人,其中2/3是高卢兵。这是将才的最高范例,历史上没有比这更成功的例子。这一战,结束了罗马人信赖其步兵的神话,而部署军事战术的防线达2000年之久。