Wales U20 (13) 20
Wales Under-20s finished their Six Nations campaign on a high
Tries: Owen, Webb
Cons: Halfpenny (2)
Pens: Halfpenny (2)
France U20 (9) 16
Pens: Dunora (2)
A superb late try from Rhys Webb secured victory for Wales at Newport's Rodney Parade and second place in the Under-20 Six Nations Championship.
Two France sin-binnings and a try from man-of-the-match Gareth Owen helped the home side to a 13-9 lead at the break.
But Wales had two men yellow carded and the French forwards turned the screw before Mathieu Bastareaud scored.
The game was slipping away before superb breaks from Jonathan Davies and Owen set up Webb for the winning try.
Wales, who meet France again on 14 June in the IRB Junior World Cup, lost their opening Six Nations game to championship winners England, but have maintained a 100% record since.
France full-back Julien Dunora opened the scoring with a penalty after Wales handled at a ruck, before the video referee denied the home side a try.
Daniel Biggar broke in the France 22 and found half-back partner Webb.
The scrum-half appeared to ground the ball against the post, but on review he was found to have knocked on.
We've worked very hard for this and I think we deserved second place
The visitors' failure to deal with a high kick in the damp conditions gave Biggar another excellent attacking opportunity and his shimmy looked likely to set up a try.
A deliberate Wesley Fofana knock-on spoilt the chance, though, the wing sin-binned and lucky not to concede a penalty try before Leigh Halfpenny equalised with the resultant kick.
Another fumbled high kick set up the opening try, Biggar hacking forward on the floor and helping Owen strip the covering Dunora of possession for Owen to score.
Mathieu Belie's snap drop-goal was cancelled out by Halfpenny's second penalty, before the power of the huge French side began to make a mark and Dunora slotted his second kick.
As they began to get the upper hand discipline let the visitors down, Yohann Vivalda sent to the sin bin for dropping his knees on Biggar as the outside-half lay helpless on the floor.
Wales began the second half 13-9 ahead and with a man advantage, but two minutes in Owen was sin-binned for tackling Dunora when the full-back was in the air.
The home side were temporarily down to 13 men when Josh Turnbull saw the fourth yellow card of the night for over-vigorous use of the boot at a ruck.
France immediately capitalised from a loose Wales scrum on the home line, the ball reaching the giant Bastareaud who powered over from short range for a converted try.
The win just gives first blood to us
Wales Under-20 coach Patrick Horgan
The visitors used their forward power to grind down Wales and defend their 16-13 lead, until a dramatic break from his own line by Davies swung the momentum.
France recovered, but a loose clearance kick fell to Owen, and the centre cut inside and hared for the posts.
As the cover closed in, Owen looked back outside and found Webb who crossed for a converted try.
The French forwards lumbered straight back to the Welsh line, Nicolas Agnesi denied a short-range try from a ruck as the referee prematurely whistled for a France scrum.
The short-sighted, relentless pressure continued just yards from the Wales line, but the tireless home defence did enough to hold on.
Man-of-the-match Gareth Owen:
"It was a very tough game and it's been a very hard week for us.
"We've worked very hard for this and I think we deserved second place.
"I think my try was a bit of luck, to be honest. I just took it off him as he got up and just went over for the try."
Wales Under-20 coach Patrick Horgan:
"We've prepared hard this week and we thought that the French were going to be a tough challenge.
"The win just gives first blood to us and we must remember that it will be different weather in June. We're looking forward to it."
Wales Under-20: Daniel Evans (Scarlets); Leigh Halfpenny (Blues), Jonathan Davies (Scarlets), Gareth Owen (Ospreys), Jimmy Norris (Dragons); Daniel Biggar (Ospreys), Rhys Webb (Ospreys); Sam Hobbs (Blues), Rhys Lawrence (Ospreys), Patrick Palmer (Blues), Haydn Pugh (Scarlets), Jevon Groves (capt, Blues), Josh Turnbull (Scarlets), Justin Tipuric (Ospreys), Lloyd Phillips (Scarlets).
Replacements: Ryan Prosser (Bristol Academy), Ryan Bevington (Ospreys), Scott Andrews (Blues), Ashley Sweet (Dragons), Rory Pitman (Ospreys), Luke Evans (Blues), Jason Tovey (Dragons).
France Under-20: Julien Dunora (Pau); Benjamin Fall (Begles Bordeaux), Guillaume Namy (Brive), Mathieu Bastareaud (Stade Francais Paris), Wesley Fofana (Clermont Auvergne); Mathieu Belie (Toulouse), Morgan Parra (Bourgoin, capt); Nicolas Agnesi (Toulon), Antonin Raffault (Clermont Auvergne), Arthur Joly (Stade Français Paris), Yoann Maestri (Toulon), Adam Jaulhac (Brive), Yohann Vivalda (Perpignan), Laurent Thuery (Toulouse), Raphael Lakafia (Grenoble).
Replacements: Clément Maynadier (Albi), Rabah Slimani (Stade Français Paris), Jean Baptiste Roidot (Biarritz Olympique), Arthur Chollon (Bordeaux Begles), Thierry Lacrampe (Tarbes Pyrénées), Khaled Zagar (Toulon), Cédric Coll (Perpignan).