Maven’s Strengths and Weaknesses as a Dependency Management System

For many Java teams, switching to Maven will introduce them to formal dependency management. Maven actually does a pretty decent job and is a fantastic system out of the box for informal projects. However, for teams looking to implement rigorous component reuse policies, Maven falls short.

Last month, in our article Chaperoning Promiscuous Software Reuse, we reviewed four elements of a successful strategy for managing components. Briefly, these elements are:

  1. Testing and Validation of 3rd party components Only libraries approved for reuse should be used by developers. If developers want to use additional libraries, they can submit them for screening.
  2. A Definitive Software Library: A team should have an official storage place for reusable, versioned components (both internal and 3rd party).
  3. Using Protection: A team should have an “immune system” that rejects libraries other than those from the DSL.
  4. Rapid impact analysis audit When something goes wrong, it should be easy to determine what versions of which components were used by the project. Continue reading

Request Contexts

Adventures in Advanced AnthillPro Concepts

The idea of a request context is foreign to most AnthillPro users and administrators but is key to understanding how AnthillPro manages build order and consistency along a dependency hierarchy. Administrators using dependencies aggressively would be well served by understanding the request context.

Understanding “Requests”

Before we get into the request context, we should understand the idea of a build request. Immediately after the user presses the Build button, AnthillPro creates a build request. This starts the process towards creating the build, but doesn’t always immediately result in a build. For instance, if the “Force” box isn’t checked, AnthillPro might start by asking source control if there are changes. If there aren’t any changes in source control since the last build, and none of the project’s dependencies have changed the request will terminate having decided that a build is unneeded.  Continue reading

2 Strategies for Managing Run-Time dependencies

Many software projects have dependencies at run time on other projects that are built and deployed by the software team. Some version of another application must be present in order to run properly.
We see this situation appearing most often with Web Services,  J2EE environments where EJB clients and applications must match, and even in the roll-out of related database schemas.

The basic problem these scenarios face, is that deployments must be orchestrated so that any related projects move through the life-cycle at the same time. The strategies for addressing this in AnthillPro are pretty straight-forward.

First create a new AnthillPro project that uses dependency rules to represent the full set of components that get released together. A “Build” of this project is mostly responsible for assembling a set of components that will be deployed together. At this point there are two main paths to follow: Continue reading