In the past Verge was specifically a project dedicated to the Verge Web Framework. In this latest release, Verge has added a new build system to the list features. This new build system, called Savant, is an extension to the popular Ant build system from Apache. Verge 2.2 also includes other features, including some improvements to the Verge Web Framework.
- Posted by: Brian Pontarelli
- Posted on: May 03 2004 16:50 EDT
Dependencies, especially inter-project dependencies, have always been a difficult problem to solve. The fundamental problem is how should project dependencies be resolved during the build and deployment process? One of the easiest and most often used solutions is to add the dependencies to the projects code base. This can cause mountains of headaches because of the constant need to ensure that the dependencies are up-to-date and in sync. Another solution has been to add 3rd party dependencies, such as libraries, to the code base and then copy around the inter-project dependencies at build time. This has the problem that builds now need to be done in a specific order and the copying portions of the build file must be maintained and updated when new dependencies are added.
Savant solves these problems by allowing a project to declare its dependencies. It also handles inter-project dependencies by actively building other projects during the course of the build. In addition, Savant supports resolving 3rd party dependencies in a variety of ways, including downloading from the Internet (or any HTTP compliant server) or pulling from a CVS module. These resolved dependencies are then cached locally to reduce overhead and allow disconnected development. The best part about Savant is that it is built entirely on Apache Ant and does not require a complete rewrite of build files to use it.
Besides the addition of Savant, Verge 2.2 has other new features including an updated method of handling URLs in the Verge Web Framework. This new handling makes URL generation much simpler and debugging much easier.
For more information about this release visit http://www.inversoft.com/features-2.2.html.
Also check out the Resources section of the website for all the documentation for Verge 2.2.
Why didnt u use Maven for the build?
Why didnt u use Maven for the build?Maven had some short comings that made it very difficult to use. Maven promotes a single artifact per project. Verge produces multiple artifacts per project and most of the projects I've worked on do this as well. This could be a religious debate, but I favor flexibility in a build system rather than forcing conventions.
This single artifact ideal was difficult to work around when attempting to deploy projects. Plus, nearly all plugins conform to this and that was not something we could easily switch to. I think this is probably the biggest case I have against Maven.
Maven also is nearly a completely new system. Sure you can use ant build files with it, but really this is frowned upon and we actually ran into some limitations with this. What this meant was that we had to essentially scrap our existing working build to use maven.
Maven has no support for local project building unless you build it out by hand. Savant allows local projects to be built in the process of resolving dependencies.
Also, Maven had a few bugs that made it somewhat annoying. The inheritance didn't work correctly, but seemed like it could have been a cool feature. A lot of the plugins didn't work quite right and we spent a lot of time just figuring out that they didn't work.
Building J2EE projects was also a bit of a nightmare considering that in order to do this Maven sytle, each EAR and each WAR had to be separate projects. Not very elegant and a lot of build files to manage.
Basically, Maven was just a bit too beta and fundamentally didn't support multiple artifacts and that is why I decided to create Savant.