Maven is a build automation tool primarily associated with the Java programming language. Developed by the Apache Software Foundation and released in 2004 it provides a standardised way to describe how a software project is built.
For more information on Maven, please see:
Dude, Where's my Config?
Cloudsmith provides contextual setup documentation with copy n' paste snippets (with your namespace/repo pre-configured) within the repository documentation.
A Maven Repository or Maven Repo is a registry of packaged files, stored, indexed and made accessible to projects that depend on them. Each package has a unique name and version allowing for repeatable continuous integration and continuous delivery (or continuous deployment) tasks.
The Maven repository index stores metadata about each package; that the Maven tooling looks up at build time enabling pulling in of dependency projects and extensions.
A POM, the Project Object Model, is the XML file that describes all the aspects of your project that relate to building and packaging the source code into a package file. Typically a jar (java archive). The metadata held within the pom.xml that is typically stored within the jar itself allows Maven to index the package into a Maven Repository for easy distribution.
Maven provides a co-ordinate system of GroupId, ArtifactId and Version. These three co-ordinates allow you to specify a unique package that can be shared publicly or privately.
- GroupId is the overall namespace and usually takes the form of a reverse domain (e.g. com.cloudsmith)
- ArtifactId is the name of the packaged artifact (e.g. cyclone)
- Version - is the semantic version of the package (e.g. 1.0 or 2.0.1)
Version can be suffixed to allow for higher fidelity for instance for SNAPSHOT versions typically used for nightly builds of code not to be officially released.
A Fat Jar, is also referred to as an Uber Jar, is a Java Archive library that contains all classes, including all the classes of its dependencies. This allows the Jar to be run standalone without requiring any further code available on the Class Path.
The disadvantage of creating an all-in-one jar mean that you have to deploy everything (a potentially large file) each time. If you split the Fat Jar into components you can separately test, version and release code enabling faster deployments and your developers to cherry-pick components for inclusion in other projects.