I’m being kind hardcore with the separation of dialects in Savant (a dialect is a collection of plugins – for example there is a Java dialect with a compile plugin). The reason being is that I feel dialects should not interfere with each other in the same manner that web applications should not.
Java has never been particularly good at versioning and I’m only taking on one small piece of the problem by ensuring that dialects can use their own versions of JARs without influencing others (that is unless the JAR is part of the core Savant runtime). The next part is to tackle the issue of versioning plugins and dialects.
A dialect should be able to identify what version it is and a project should be able to declare a hardcoded version it requires. Likewise, a project should be able to specify a version range as well as the latest version available. This will ensure that the dialects can change and projects will continue to build as long as the version they were first created against still exists. This will also allow backwards incompatible changes in dialects to occur.