Why it is a good idea to put third party libraries into CVS.

Self esteem comes from trying to do something no matter how small, and then accomplishing it.
--- Sheri Lewis


Last updated: December 25th, 2001

It does not matter how smart any particular programmer is, there is always something somebody can do wrong. Who reads the documentation these days? Even if you force everybody to read it, it is impossible to describe all situations! So less variables we have - less problems will arise. I worked in several companies in US and in every company there were few people that helped everybody to setup their build environments. It was a multi step process including drive mappings, script execution (after every header change!), file copying. And now imagine that project management decided to upgrade some third party library to a newer version. Everybody, present in the office, installs it, changes some environment variables and tries to build the project. To make the life worse there were previous releases we supported and they used old libraries, so we need to keep old version somewhere. Even if you are a very accurate person, you cannot be 100% sure that you use the correct libraries in all cases.

So before starting a new project we sat and started to think how to make things easier. In our case we were going to use apache free libraries and there was a new version of them every few days. So the decision was clear - we put all third party libraries into CVS. We even considered putting JBuilder there ;-) . Please consult your lawyers about possible licence problems. The opponents were afraid that it would make the repository too slow. They were wrong... until we put unpacked Tomcat there. The speed was not too bad after that, but a delay of 20 seconds in WinCVS to show changed files was too much. JBuilder requires unpacked packages for compilation (it does not understand jars inside jars), but CVS likes less files. The answer was ANT. I created a script that extracted all necessary files from distributives and placed them into special folders within our repository (to keep all paths relative). We configured .cvsignore files to ignore the extracted libraries. The mechanism was so well designed, so I updated many apache libraries every day without any problems. The result was very successful. Even my boss was able to build it!

Good luck!.

© 2001 Alexey N. Solofnenko