Skip to main content

Dependencies Management

Dependency Management in Maven (Automation Testing Perspective)

Dependency management is one of the primary reasons Maven exists.
For automation testing engineers, mastering dependency management is non‑negotiable, because almost every automation failure or instability eventually traces back to library conflicts or wrong versions.


What is Dependency Management?

In Maven, dependency management means:

  • Declaring external libraries in pom.xml
  • Letting Maven download and manage them
  • Ensuring consistent versions across machines and CI

In automation projects, dependencies include:

  • Selenium
  • TestNG
  • RestAssured
  • Logging frameworks
  • Reporting libraries
  • Utility libraries

Why Dependency Management Matters in Automation

Without proper dependency management:

  • Tests fail randomly
  • Builds work locally but fail in CI
  • Upgrading one library breaks others
  • Debugging becomes painful

With Maven:

  • One source of truth (pom.xml)
  • Reproducible builds
  • Predictable execution

Basic Dependency Declaration

<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.21.0</version>
</dependency>
</dependencies>

Maven automatically:

  • Downloads the library
  • Downloads all transitive dependencies
  • Adds them to the classpath

Dependency Coordinates Explained

<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.10.2</version>
ElementMeaning
groupIdOrganization / project
artifactIdLibrary name
versionExact version used

These three uniquely identify a dependency.


Using <properties> for Version Control ⭐

Bad Practice ❌

<version>4.21.0</version>

Good Practice ✅

<properties>
<selenium.version>4.21.0</selenium.version>
<testng.version>7.10.2</testng.version>
</properties>

<dependency>
<version>${selenium.version}</version>
</dependency>

Why This Matters

  • Easy upgrades
  • No duplication
  • Cleaner pom.xml

Dependency Scope (VERY IMPORTANT)

Scopes control where a dependency is used.

ScopeMeaningAutomation Usage
compileDefaultFramework code
testTest-onlyTestNG, Selenium
providedRuntime providedRare
runtimeRuntime onlyRare

Example

<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<scope>test</scope>
</dependency>

Transitive Dependencies (Hidden Power)

When you add:

selenium-java

Maven automatically pulls:

  • WebDriver binaries
  • JSON libraries
  • HTTP clients

This is called transitive dependency resolution.


Dependency Conflict (Very Common Problem)

Problem

Two libraries require different versions of the same dependency.

Symptoms:

  • NoSuchMethodError
  • ClassNotFoundException
  • Random runtime failures

Fixing Conflicts Using Dependency Tree

mvn dependency:tree

This shows:

  • Who pulls which dependency
  • Conflicting versions

Excluding Transitive Dependencies

<dependency>
<groupId>org.some.lib</groupId>
<artifactId>example</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

Use exclusions carefully.


<dependencyManagement> (Advanced but Important)

Used to:

  • Control versions centrally
  • Avoid duplication in multi-module projects
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.21.0</version>
</dependency>
</dependencies>
</dependencyManagement>

Child modules inherit versions automatically.


Multi‑Module Automation Projects

Common in large organizations:

parent-pom
├─ framework
├─ ui-tests
├─ api-tests

Dependency management prevents:

  • Version drift
  • Inconsistent builds

Common Dependency Mistakes

  • Hardcoding versions everywhere
  • Mixing incompatible Selenium/TestNG versions
  • Ignoring transitive conflicts
  • Updating one dependency blindly
  • Copy‑pasting dependencies without understanding

Best Practices (Automation Engineers)

  • Always use <properties>
  • Use dependency:tree regularly
  • Lock versions explicitly
  • Avoid unnecessary exclusions
  • Upgrade dependencies deliberately

Key Takeaways

  • Dependency management is Maven’s biggest strength
  • Most automation issues come from bad dependency control
  • Properties + scopes = stability
  • Dependency conflicts are solvable with Maven tools
  • Mastering this makes your framework reliable

How This Fits in the Big Picture

Dependencies

Maven Build

Surefire Plugin

TestNG

Automation Tests

Correct dependencies = stable automation.