IMHO Commons should not to foist jars on people that they don't ask for. Foisting is bad manners, is one key reason why commons gets criticised, and gives people a bad impression of both the base project (eg beanutils) and the dependency (collections). For example, I have a bad impression of all projects where [logging] is foisted on me, and thus a bad impression of [logging].
(Note that a few years ago I argued for complex dependencies - now I go with the charter and argue for no dependecies if possible. This is one of the hardest concepts to grasp in commons, and took me ages to get. But it is key if we are to remain successful.) I'm in favour of these separations from a [collections] POV because many projects have dependencies on collections.jar when they don't need to, foisting [collections] on people when it shouldn't be, giving collections a bad name. The KEY THING is for those projects that remove a dependency to not expose any [collections] specific code in their API. This is where the hibernate example shows that they went wrong, because they copied and exposed NestableException - we must strive to avoid that, and fix it where we have already failed. The second, and separate, aspect is where a project like beanutils has some classes that definitely DO need the dependency. Having a separate 'combination' jar, beanutils-collections in this case, works well. Its clear as to who owns and maintains the code, and clear as to a separate dependency. I understand the difficulty other committers have with this. Its not 'normal' coding practice, and flies in the face of 'normal' code reuse, but it is the Right Thing to do. Stephen ----- Original Message ----- From: "Eric Pugh" <[EMAIL PROTECTED]> > Well yes, if you just want BeanUtils, then having Collections is a pain.. > But typically if you are importing things like BeanUtils then you are using > other commons components, and you may very well end up having Collections > anyway. I know that in most of my projects I use BeanUtils and Lang and > Collections because I know what they provide and find them useful. > > For Hibernate, they cloned the NestableException from Lang to remove the > dependency. Great.. But I still have Lang. Now I keep throwing a > net.hibernate..NestableException when I wanted a > org.apache..lang.exceptions.NestableException due to code completion in my > IDE! > > Unless users are working in an environment where minimizing the total number > of jars is crucial, I don't think cloning a dependency is worth it to save a > jar. > > Lastly, it seems like you end up removing a dependency on Collections, and > add a dependency on BeanCollections.. And now, as a user, I have to make a > decision on whether to include BeanCollections or not.. Which means I need > to learn more about BeanUtils to make an intelligent decision, which raises > the bar to use. > > My 2 cents.. :-) > > Eric > > > -----Original Message----- > > From: David Graham [mailto:[EMAIL PROTECTED] > > Sent: Friday, May 07, 2004 2:03 PM > > To: Jakarta Commons Developers List > > Subject: RE: [beanutils] PROPOSAL: eliminate core dependency on > > collections > > > > > > > > --- Martin Cooper <[EMAIL PROTECTED]> wrote: > > > > > > > > > > -----Original Message----- > > > > From: robert burrell donkin > > > > [mailto:[EMAIL PROTECTED] > > > > Sent: Thursday, May 06, 2004 12:15 PM > > > > To: Jakarta Commons Developers List > > > > Subject: [beanutils] PROPOSAL: eliminate core dependency on > > > collections > > > > > > > > > > > > PROPOSAL: eliminate the core dependency on commons-collections > > > > > > No doubt I'm sounding like a broken record and/or a lone voice in the > > > wilderness, but I really don't like the whole idea of cloning classes > > > from > > > one Commons component into some other package to "eliminate a > > > dependency". > > > > I agree with you that this is a complete hack and a generally bad idea but > > what seems to have been lost in the discussion is that this is a > > *temporary* solution. The cloned classes will only exist for one release > > so the API can be deprecated. > > > > IMO, there is absolutely no reason for Digester, BeanUtils, Validator, or > > most other commons component to have a dependency on Collections. > > Removing this dependency will benefit many projects that just want to use > > BeanUtils without dragging around a large and mostly unused Collections > > jar. > > > > David > > > > > > > > Commons came into being so that people could *share* implementations, > > > and > > > *avoid* cloning them. When classes are cloned, you no longer get the > > > benefits of bug fixes coming from a common component, advances in the > > > design > > > of common components, more eyes looking at the classes in the context of > > > a > > > component whose purpose is well-defined, etc. > > > > > > When a developer needs to add functionality to an ex-client of a > > > component > > > like Collections, they might clone another class. Before long, people > > > will > > > lose track of how many cloned classes there are, and there will be so > > > many > > > hidden potential dependencies that it would make a whole lot more sense > > > to > > > depend on the original package, but it just won't occur to people to do > > > that > > > any more. > > > > > > I'm not going to -1 this, because it seems clear that there is support > > > for > > > it, but frankly I just don't understand the mentality that says it's a > > > good > > > thing to *not* share components that were designed from the get-go to be > > > shared. Bizarre. > > > > > > -- > > > Martin Cooper > > > > > > > > > > > > > > rationale - this will not only eliminate a sizable dependency for many > > > > products depending on beanutils but also reduce chances of > > > > compatibility issues with the various versions of collections. > > > > > > > > PLAN: > > > > > > > > 1 add org.apache.commons.collections.ArrayStack and > > > > org.apache.commons.collections.Buffer source to beanutils (these are > > > > required by the public API) > > > > > > > > 2 replace the references to FastHashMap with a private static > > > > implementation. consider whether to replace this altogether. > > > > > > > > 3 factor out a new bean-collections jar under extras/bean-collections > > > > containing the (cool) implementations of collections stuffs using > > > > beanutils bean-magic. > > > > > > > > i've made a start on this work (so if anyone has any reasonable > > > > objections, now would be a very good time to state them :) but i'd be > > > > willing to change if anyone comes up with any improvements to this > > > > plan. > > > > > > > > - robert > > > > > > > > > > > > --------------------------------------------------------------------- > > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > __________________________________ > > Do you Yahoo!? > > Win a $20,000 Career Makeover at Yahoo! HotJobs > > http://hotjobs.sweepstakes.yahoo.com/careermakeover > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]