What is a Maven Repository
In this tutorial we are going to learn about Maven Repository in detail.
If you’ve just joined the software engineering workforce at a Java shop, or have recently become a Java developer, you may be asking yourself, “What is Maven? Why do I need it?”.
Asking your co-workers, they might respond with something along the lines of, “A Maven Repository is where we store all of our artifacts”.
Artifacts? Are we some type of archeologist?
This article assumes you’re relatively new to the professional world of the Java ecosystem.
Its goal is to answer the following questions which will surely arise in the first couple of weeks at your new job:
- What is an Artifact?
- What is Maven?
- What is a Maven Repository?
- What about Private Maven Repositories?
Consult the Table of Contents above to jump ahead to the question that is most relevant to you, or read the entire article to gain the most knowledge. Either way, we hope this article will provide you with a helpful intro to the world of Artifacts and Maven.
Before we get started, we’d like to make clear other assumptions that hold for the remainder of this article:
We are discussing Java software development practices. All references to anything software related will refer to the Java world. Maven, Artifacts, and other related topics discussed here are used by other programming languages that run on the Java Virtual Machine (JVM), such as Scala (Simple Build Tool - SBT), Groovy (Ant & Ivy), and Clojure (Leiningen & Boot). The concepts discussed here apply similarly to these technologies.
What is a Maven Artifact?
In Maven, an artifact is any type of file that is used in the software development process. The most common of these are Java libraries, also known as ‘JAR files’. Software distribution files, packages, maven project (POM) files , documentation bundles, machine learning models, and any other type of file you can think of can all be artifacts in the maven world.
Artifacts are used in a Java program for many different purposes. When a JAR file artifact is used at compile time it is typically used to bring in Java library code so that code can be reused.
Some artifacts may be packaged with the software and not used until runtime. These can include artifacts which hold data of some sort: images, machine learning models, documentation, language packs, etc.
TLDR: Artifacts are files used by Java programs. They can also be Java programs in the case of self executing archives or other type of executable Java file.
The most common type of artifact you’ll encounter is a dependency - ie. a java library. This brings us to your new friend (and our old friend), Maven.
What is Maven?
Maven is a software development tool which automates dependency management by defining a project object model (POM) to abstracts the structure of a software project. Using POM files to represent the concept of a project, Maven provide a single model of a project that can be used by many different tools in the Java Ecosystem (IDEs, build scripts, etc).
Where is Maven used?
You can find usages of Maven in build scripts, deployment pipelines, continuous integration builds and pretty much any place where JVM based software is created and deployed.
It’s in use by teams large and small, throughout the world to compile software into JAR files, build reports and documentation, and automate many other tasks.
Why should I use Maven?
Let’s take a quick minute and discuss what the Java development process when you’re just getting started.
Let’s say you start a new project for your Facebook-disrupting new app. You open your editor and start writing your Java program. You come to a part in the code where you want to insert data into a database so you have two choice:
Research the database protocol and write code that talks directly to the database, or.. Find a library which already has implemented the database connectivity. Which one will you choose? If you have any hope of shipping that new disruptive app, you had better use the library. Why? Because writing database code is non-trivial and will suck down most of your energy before you even get to your actual app’s code.