This is done by hundreds of projects every year--often quite successfully--through Google Summer of Code. I've been a mentor for GSOC for two years.
If I understand you correctly though, this is a case of a whole classroom forced into a single project as opposed to a few students in each one. This creates a massive management disaster and many other issues:
1. Coding for open source works best when you're interested in the project you're working for. If you force everyone to work on one project, many people won't be interested, and in my experience as a manager/leader of an open source project, such people are an utter waste of time. Of course, it's not their fault they were assigned to something they're not interested in.
2. I've educated quite a few people in the full inner workings of our codebase. But it's one thing to mentor one or three people; it's another to mentor twenty.
3. Most projects don't have enough work for twenty people. Assigning a ton of people to one task won't get it done faster, and assigning everyone a separate task will just make the load on the mentors/developers absurd.
4. The single biggest problem with these types of systems, including GSOC, is the problem of ensuring that code gets merged at the end of the development period. Many students will simply disappear, leaving behind huge patches with nobody to maintain them. For example, the ffmpeg project has suffered greatly from this, with many feature patches taking years to merge and others simply languishing for eternity with nobody to finish them off.
I have mentored many students for my project, both in GSOC and otherwise. I had one student who simply came to me one day and said that he wanted to learn the codebase: so each day he took one module and learned how it worked, asked me questions about it, and studied until he thought he understood it--the I quizzed him. After about two weeks, he had a pretty good background in most of the program. He has since become a significant contributor.
My policy is that anyone who wants to learn can ask questions and get answers in their quest to understand how things work: this was how I became an expert, so it's my obligation to pass on my knowledge to those who want to do the same.
I could do great with a few highly interested students. But I wouldn't even be able to come up with enough tasks for a whole class, let alone the resources to teach them all without a classroom. My suggestion would be to let students pick their own open source project, or some other method of splitting students between projects, to avoid dumping an entire class on one project.