Introduction
A prerequisite for efficient development is to choose good tools and use these tools to their full potential. The Java community has a comprehensive suite of tools to choose from; IDE, VCS, build tools, CI server and Build Artifact Repository Manager. It is common (perhaps even best practice?) to standardize on VCS and build tool on Enterprise Java projects. While it might be appropriate to standardize on IDE in a small (not Enterprise) project, this is seldom a good idea (reasoning: three competing IDEs, "works-here-syndrome", etc.). As of time of writing Maven2 is the leading build tool on the market and Subversion For repository management, the choice is not that obvious as there are at least three adequate products available; Archiva, Artifactory and Nexus. Archiva There are plenty of good Continuous Integration servers available, both commercial and Open Source. An overview of some of the most popular ones can be found in Continuous Integration Server Overview. Choose anyone you want. We prefer Continuum for two reasons:
The rest of this article will explain how to work efficiently on Maven-based projects in an Enterprise context, with focus on the infrastructure required. Effective communication is a key component in any well-functional team. This topic is outside the scope of this article, but a wiki, an issue tracker, email lists and an agile mindset are highly recommended. |
Example setup1. IDE - any |
Component overview
There are basicly three main processes we want Enterprise Maven Infrastructure to support (in addition to regular Continuous Integration)
1. use CI server to deploy snapshots to the build artifact repository manager
2. release (initiated from CI server or directly with maven)
3. deploy the technical site so the documentation (for the snapshot or the release is easily accessable)
Step 3. is optional, but deploying the site at least nightly AND for every release adds a lot of value.
1. Deploy snapshotsUnknown macro: {gliffy} |
2. ReleaseUnknown macro: {gliffy} |
Implementation recommendations
- Organizing Maven projects
- Repository Management
- CI recommendations
- Version Control System tips and tricks
- Technical site and reporting
- Automatic code review
- Agile Project Communication
Administration
- It is important that the system administrators feel ownership and take responsibility for the infrastructure.
- Always use service names for all services to make it possible to switch implementations easily. E.g., avoid http://192.168.1.1:8080/artifactory
in company parent-pom.
Resources
- Integrated Development Environment (IDE)
(IntelliJ IDEA
, Eclipse
, Netbeans
)
- Version Control Management System (VCS) aka. Source Control Management (SCM)
- Build tools: Maven2
, Maven1
, Ant
, make
, gradle
- Build Artifact Repository Manager
2 Comments
comments.show.hideDec 12, 2008
Thomas Ferris Nicolaisen
A very neat implementation with integration between issue tracker and CI is examplified here:
http://blog.sysbliss.com/uncategorized/release-management-with-atlassian-bamboo-and-jira.html
May 04, 2010
Thomas Ferris Nicolaisen
The first half of this video does a really good job of illustrating EMI and how it works with multiple projects and modular architecture: