In most projects I’ve worked on, the project information is captured in some sort of
README.md file. While this has its strengths, such as ability to write free form text and embed images, it doesn’t quite fit with the project because when the artifact is produced during the build time, the read me is not checked into the artifact repository along with it. So how do I know who the contributors were for that specific artifact version? How do I know where the project was hosted at the time?
Well, today I learned that maven provides ability to capture some of those attributes and some more! I like this because it means that when the artifact gets checked in (along with its pom.xml) the details about the project are captured for that version, frozen in time.
Great thing about these attibutes is that when you run
mvn site they are used in the project information html page that maven produces. Technically, then you can upload this to any statically hosted site location, all versioned up and ready to be explored.
Ok so lets begin exploring these attributes. The first three attributes are the basic ones:
<name>Sample API (HTTP)</name>
<description>HTTP API endpoint</description>
For people working in corporations and companies, the following might be useful, especially when open sourcing the project:
<name>Company Name Inc</name>
licenses tag can be used to describe some licensing information. How many times have you come across a project that has changed the licensing information half way through versions? This is a life saver (at least legally)!
Some source control information is also useful, however, whats more useful is knowing where to go in order to raise issues. In most companies, people use source control to store code but then use an alternative mechanism like Jira or Trello to mange issues. The
issueManagement tags are useful here in clarifying such information:
<system>Private Jira powered issue management</system>
Developer information on projects is very useful. Companies don’t usually like this because, well, developers are supposed to be expendable, however, in my humble opinion, it is useful to list developers who were working on the project at the time. This way the versions can be tracked, at least to the lead working on it at the time. Use it thusly:
For contributors, people who have worked on the project, although not necessarily part of it exclusively, use:
Lastly, it is useful to capture some information about pipeline that was used to create the project. For this, maven has
<system>Some Jenkins based pipeline</system>
The above is just a small example of what you can do with these attributes, there are many more sub-attributes that you can explore. Hope this is a good introduction and kicks off some ideas of what you can do with this information.