Bunker Hill Military Academy has just concluded another school year. Cadet Brian Moreland (Timothy Hutton), a junior, meets privately with the academy commandant, retired Brigadier General Harlan Bache (George C. Scott). Bache promotes Moreland to Cadet Major, the paramount rank at BHMA. Bache also reflects on the time when he was a cadet at West Point (Moreland’s intended college), as well as a graduate of BHMA prior to that, and how he dreads his forthcoming retirement. Moreland is congratulated first by his best friend Cadet Captain Alex Dwyer (Sean Penn), as well as by Cadet Captain David Shawn (Tom Cruise) and Cadet Lieutenant Edward West (Evan Handler). Shawn leads a celebration in the hallway. The commencement proceeds, with a parade and a pass in review.
Following the ceremonies, General Bache announces that BHMA’s board of trustees is selling the school to real estate developers. The school will remain open for one year in order to allow the seniors to graduate and give the underclassmen time to apply to other schools. The delay gives many cadets hope that BHMA can be saved. Bache also hopes that the institute can be saved, as he remarks to Moreland, “We are here, and the condos are not”.
The graduation ceremony is followed by a ball that evening. Outside the gates, a brawl erupts when several local teenagers harass the cadets, which escalates into one local assaulting a sentry. General Bache tries to break up the fight, but his service pistol is seized by one of the teens and the weapon discharges, killing a second teen. Although the magazine had been removed, a round was still in the chamber. Bache is arrested and charged with manslaughter. However, the trauma of the event combined with the arrest triggered a heart attack and Bache is hospitalized in critical condition. The board of trustees closes BHMA immediately.
Since Bache is ill, Moreland meets with the officers of the cadet corps and they take control of Bunker Hill. The Dean of Students (Jess Osuna) arrives with the local Sheriff (James Handy) to empty the armory. They find the weapons in the hands of an armed cadre led by Major Moreland, who demands to meet with General Bache and the trustees so that BHMA will be kept open. The Dean and Sheriff are escorted off the campus by armed cadets, who secure the perimeter.
At the same time, cadets are sent to a local warehouse for the purpose of restocking BHMA’s provisions, but one of the trucks breaks down on the way back. As Dwyer is attempting to fix the engine, townies surround the truck, demanding vengeance for the death of their friend. After Dwyer is accosted and Pierce is pulled out of the stalled truck Shawn fires several bursts from his M16 into the air, dispersing the mob. The cadets abandon the stalled truck, fleeing the scene in the second truck, ramming a police car that was blocking their path. The State police surround the campus, but Shawn oversees a defense of the wall which turns into a standoff.
Moreland reveals to Dwyer that he has been at Bunker Hill since the age of 12 after his mother died in an army hospital. Moreland says his father permitted him to cry for only fifteen minutes. Dwyer comes to a better understanding of Moreland – that he regards Bunker Hill as his home and General Bache as a surrogate father, and is now facing the loss of both.
A delegation of parents and trustees is admitted. The parents include Moreland’s father (Wayne Tippit), a master sergeant in the US Army, who bluntly orders his son to end the standoff. He fails to sway Moreland. The conversation between Moreland and his father becomes increasingly heated when Moreland’s father speaks derisively of General Bache, and culminates with Moreland being struck in the face by his father.
To show the police and parents that none of the boys are being held against their will, Moreland assembles the cadets and offers them a chance to walk out. They all choose to stay. The siege grows more tense when the National Guard, led by Colonel Kerby (Ronny Cox), arrives. Kerby admires the academy and does not wish to see it closed. He even offers to help Moreland fight for the academy, provided that they do it through legal means and not by force of arms. He warns Moreland that his loyalty is to the state legislature, which has been inundated with calls from concerned families and from locals who are scared by the standoff. Despite the Colonel’s diplomatic approach, he fails to sway Moreland.
The next morning, it is discovered that eleven cadets have fled. Moreland assembles the battalion, to whom he again offers the opportunity to leave. Led by Lt. West, a number of the cadets discard their weapons and leave. Dwyer, upset by Moreland’s behavior berates Moreland for living in a fantasy that he and Bache created and makes reference to the relationship being homosexual. This ends up in a fight between the two with Shawn holding anyone back that might attempt to break the two up. At this point The Authorities shut off the power to the campus thus ending the fight between the two upper-classmen. Moreland tells Dwyer he can leave, but unlike the other students at the school who come from a military background, Dwyer is the only one there for discipline and would have nowhere to go if he left, leaving him no choice but to stay. While restarting the school’s gasoline-powered generator, Cadet Pierce (Giancarlo Esposito) is burned. An ambulance is permitted to enter and take the injured Pierce away. Colonel Kerby once again tries to reason with Moreland, and Moreland agrees, provided he be brought to the hospital and Bache orders him to stand down. Kerby says that Bache died the night before. Upon hearing the news, Moreland ceases negotiations with Kerby.
The cadets hold a military memorial service in his honor, to include a riderless horse. Even Kerby and the Guardsmen stand at attention at the front gates.
The next night, a tank approaches the main gate. Two young cadets, Derek (John P. Navin Jr.) and Charlie (Brendan Ward), Moreland’s underclassman, are on sentry duty. Derek, the older of the two, panics and rushes to surrender. Charlie tries to stop him. Derek drops his rifle, which goes off as it hits the ground. The Guardsmen open fire. Derek safely reaches the gate, but Charlie is killed.
Charlie’s death weakens Moreland’s resolve and Dwyer persuades him to end the occupation. They muster the cadets and order them to stand down. Everyone complies except Shawn, who opens fire from the barracks with an M60 machine gun. As the Guardsmen return fire, Dwyer and Moreland rush inside to stop Shawn. When Moreland attempts to stop Shawn, a volley of bullets from the Guardsmen hits the building and kills both of them. Dwyer carries Moreland’s body out of the barracks as Kerby, the National Guardsmen, and the remaining Cadets look on.