🎓 Top 15 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare — All my Udemy courses are real-time and project oriented courses.
▶️ Subscribe to My YouTube Channel (178K+ subscribers): Java Guides on YouTube
▶️ For AI, ChatGPT, Web, Tech, and Generative AI, subscribe to another channel: Ramesh Fadatare on YouTube
Table of Contents
- Understanding Dependencies
- Declaring Dependencies in POM
- Scope of Dependencies
- Transitive Dependencies
- Dependency Management
- Excluding Dependencies
- Repositories
- Resolving Conflicts
- Complete Example
- Conclusion
1. Understanding Dependencies
In Maven, a dependency is an external library or module required by your project. Dependencies are specified in the Project Object Model (POM) file. Maven uses these dependencies during the build process to ensure that all necessary components are available.
2. Declaring Dependencies in POM
Dependencies are declared in the <dependencies> section of the POM file. Each dependency is specified with the following elements:
groupId: The group or organization that the dependency belongs to.artifactId: The unique identifier of the dependency.version: The version of the dependency to be used.scope: The phase of the build process during which the dependency is required.
Example
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.3</version>
<scope>test</scope>
</dependency>
</dependencies>
3. Scope of Dependencies
The scope element defines the visibility of a dependency. Maven supports several scopes:
compile: Default scope, available in all classpaths.provided: Available during compilation but not included in the final package.runtime: Available during runtime but not during compilation.test: Only available during testing.system: Similar toprovidedbut requires the dependency to be explicitly provided.import: Only available fordependencyManagementsection, imports a dependency POM.
Example
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
4. Transitive Dependencies
Maven resolves not only the direct dependencies but also the dependencies of these dependencies, known as transitive dependencies. This ensures that all required libraries are included in the build.
Example
If junit depends on hamcrest-core, Maven will automatically include these transitive dependencies in the project.
5. Dependency Management
The <dependencyManagement> section is used to define a set of dependencies that can be inherited by child projects. It provides a central place to manage dependency versions.
Example
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.2</version>
</dependency>
</dependencies>
</dependencyManagement>
6. Excluding Dependencies
In some cases, you may need to exclude specific transitive dependencies. This can be done using the <exclusions> element.
Example
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.32.Final</version>
<exclusions>
<exclusion>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
7. Repositories
Maven uses repositories to download dependencies. There are two types of repositories:
- Local Repository: Located on the developer's machine, Maven caches downloaded dependencies here.
- Remote Repository: Public repositories like Maven Central or custom company repositories where dependencies are hosted.
Configuring Repositories
Repositories can be configured in the POM file or in the Maven settings file (settings.xml).
Example
<repositories>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>
8. Resolving Conflicts
When multiple versions of a dependency are included, Maven resolves conflicts using the nearest definition strategy. The version specified in the nearest POM file (closest to the project) takes precedence.
Example
If both Project A and Project B include different versions of the same dependency, Maven will choose the version specified in the POM file of the project that is directly referenced.
Using Dependency Mediation
To explicitly control the version of a dependency, you can use the <dependencyManagement> section.
Example
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
</dependencies>
</dependencyManagement>
9. Complete Example
Let's put everything together with a complete example of a simple Java project.
Project Structure
my-app
│ pom.xml
└───src
└───main
└───java
└───com
└───example
└───app
│ App.java
└───src
└───test
└───java
└───com
└───example
└───app
│ AppTest.java
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>My Maven App</name>
<description>Example Maven Project</description>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.2</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>21</source>
<target>21</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
App.java
package com.example.app;
import com.fasterxml.jackson.databind.ObjectMapper;
public class App {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
System.out.println("Hello, Maven!");
}
}
AppTest.java
package com.example.app;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class AppTest {
@Test
public void testApp() {
assertTrue(true);
}
}
10. Conclusion
Maven simplifies dependency management by automating the download and inclusion of necessary libraries. Understanding how to declare dependencies, manage scopes, handle transitive dependencies, and resolve conflicts is crucial for efficient project management. The example provided demonstrates how to set up a basic Java project with Maven, ensuring that all necessary components are available for building and testing the application.
My Top and Bestseller Udemy Courses. The sale is going on with a 70 - 80% discount. The discount coupon has been added to each course below:
Build REST APIs with Spring Boot 4, Spring Security 7, and JWT
[NEW] Learn Apache Maven with IntelliJ IDEA and Java 25
ChatGPT + Generative AI + Prompt Engineering for Beginners
Spring 7 and Spring Boot 4 for Beginners (Includes 8 Projects)
Available in Udemy for Business
Building Real-Time REST APIs with Spring Boot - Blog App
Available in Udemy for Business
Building Microservices with Spring Boot and Spring Cloud
Available in Udemy for Business
Java Full-Stack Developer Course with Spring Boot and React JS
Available in Udemy for Business
Build 5 Spring Boot Projects with Java: Line-by-Line Coding
Testing Spring Boot Application with JUnit and Mockito
Available in Udemy for Business
Spring Boot Thymeleaf Real-Time Web Application - Blog App
Available in Udemy for Business
Master Spring Data JPA with Hibernate
Available in Udemy for Business
Spring Boot + Apache Kafka Course - The Practical Guide
Available in Udemy for Business
Comments
Post a Comment
Leave Comment