Earlier this week we published John Ferguson Smart's new article, Maven Repository Managers for the Enterprise. In this article, John outlines the need for a repository manager in the enterprise environment, then describes how the most established Maven repository managers perform the required functions.
John starts out with an analogy:
If you use Maven, or even if you just use Maven repositories for your dependency management, you should be using a Maven Repository Manager. It's like using a kayak without paddles: you'll get there eventually without them, but your life will be much easier if you are properly equipped.
Why is it so important to use a repository manager in the enterprise development environment?
A correctly-configured repository manager can speed up your builds, save bandwidth, help you share artifacts within your organization, and give you better control as to what dependencies are used in your projects and where they are coming from. It can also play a key role in your development infrastructure, helping you set up a fully-blown automated build and deployment pipeline.
John then gets into the details. If you've got a large development team, and you're building large, complex software, do you really want each individual developer downloading whatever packages they need onto their local machine as they work on their segment of the code base? That's a non-starter, surely, since the inevitable result is going to be different segments of the complete system depending on different versions of the same libraries -- a potential nightmare when you later try to build all the pieces into a working application.
So, no, in a large software development project, you want a much more controlled, coherent system of dependency management. This is one of the most important functions that a repository manager provides.
Probably the most fundamental role of a repository manager is to act as a proxy/cache between you and the internet. One of the most important features of Maven is the notion of declarative dependency management. Indeed, in a Maven project, you don't store the JAR files your project needs in a lib directory within your project - rather you list the dependencies you need directly in your build script. Ant users can also use declarative dependency management, either by using the Maven ant libraries or by using Ivy.
Maven repository managers provide many conveniences as well (for example, the need for each developer to maintain a long list of public dependencies in settings.xml disappears). Maven repository managers can even work with an existing LDAP repository, to configure which users have which permissions with respect to different projects.
Maven Repository Managers for the Enterprise provides an excellent overview on why enterprise development teams in particular need a repository managers (but even smaller development teams can benefit from the more coherent, controlled environment they offer) and how Maven repository managers work. It's a very instructive read!
The examples in the previous entry talked about moving from point A to point B in a straight line. Now let's add one more point – after arriving at point B you are asked to head to point C ...
One of the most used, but under featured HTML controls, is the humble TEXTAREA control. This control is designed to accept large blocks of text from the user. A wide variety of plugins exist for the TEXTAREA that layer it with toolbars, auto-resizing, rich-text editing and the works. However, for my usage, this was way over kill. I wanted a simple line-number facility that would allow my users easily see where they are. Particuraly handy for editing code online. After searching, I couldn't find one, so I simply created my own plugin...
Several APIs demand that the user is implementing the .hashCode() method. The reason is that these APIs are using hash based containers (like HashMap) to have a fast means of managing lots of objects (always comparing objects using .equals() would need endless time). There are lots of standard implementations on the web, so the question is, what performance impact the implemenation of .hashCode() will have. I did some tests and here are the results...
This February, in collaboration with Skills Matter, I will be in Europe to deliver the Java Power Tools Bootcamp in London and Paris. The London session is scheduled for February 15, and the Paris session is scheduled for February 22.
The Java Power Tools Bootcamp is an intense, comprehensive 5-day workshop covering best-of-breed Java development, code quality and build automation tools and techniques build around tools like Maven, Hudson, Nexus and Sonar...
After configuring Hudson to run in a Glassfish with security manager enabled I started to have problems in other applications, specially web applications using reflection to access private fields in Java classes. Over the web I noticed a lot of people struggling with the same issue (Seam, GWT, Vaadin, etc). The problem is caused because most of the modern frameworks tries to access Java private fields directly - perhaps motivated by the popularity of type-unsafe languages or just designed for better performance...
In the Forums, dmalis asks How to display SVG image?: "Hi guys, anyone tried to display SVG image. I can't get it to work - this is what I did: 1. created svg image with inkscape and saved it as plain svg file. 2. added that file to my resource file (Theme creator -> add SVG..."
ezez85 has a problem involving Content Advertisement from a single peer: "Hi all, i have a little problem here. I implement a CMS in the chatting application that i am built. Since i am searching the content by keyword, the system work fine. I am wondering it is possible to search all the contents that is shared by a..."
elie has a problem with LWUIT on MAC: "Hello, I am wanting to implement JavaHelp solely for doing search. The basic search feature appears to not have any way to do a boolean search, nor a way to provide exclusion (NOT) or strict AND. However, there is source code provided for two example extensions..."
Registered users can submit event listings for the java.net Events Page using our events submission form. All submissions go through an editorial review before being posted to the site.
Archives and Subscriptions: This blog is delivered weekdays as the Java Today RSS feed. Also, once this page is no longer featured as the front page of java.net it will be archived along with other past issues in the java.net Archive.