> ## Content Index
> Fetch the complete content index at: https://www.javahandbook.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Integrating Maven With CI/CD
- URL: https://www.javahandbook.com/maven-course/integrating-maven-with-ci-cd/
- Published: 2025-08-17T07:12:12.000Z
- Updated: 2025-08-17T07:16:35.000Z
- Description: Learn how to integrate Maven with CI/CD pipelines using Jenkins and GitHub Actions. Understand skipping tests with -DskipTests and deploying Maven artifacts to Nexus or Artifactory.
- Author: Gopi Gorantala
- Tags: Maven Project, #docs, #maven-course

## **Introduction**

Modern software development relies on **Continuous Integration (CI)** and **Continuous Delivery (CD)** pipelines to automate building, testing, and deploying applications.

Maven integrates seamlessly with CI/CD tools such as **Jenkins** and **GitHub Actions**, making it easy to automate builds, run tests, and publish artifacts to repositories like **Nexus** and **Artifactory**.

In this lesson, you’ll learn:

- How to run Maven in **Jenkins** and **GitHub Actions**
- How to **skip tests** for faster builds (`-DskipTests`)
- How to deploy Maven artifacts to **Nexus/Artifactory**

## **1\. Running Maven in Jenkins**

Jenkins is one of the most widely used CI/CD tools, and Maven integrates with it out-of-the-box.

**Example: Jenkins Pipeline with Maven:**

```groovy
pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/example/my-app.git'
            }
        }
        stage('Build with Maven') {
            steps {
                sh 'mvn clean install'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
    }
}

```

✅ Jenkins can automatically detect your `pom.xml` and run Maven commands.  
✅ Build results, test reports, and artifacts can be stored and displayed in Jenkins.

## **2\. Running Maven in GitHub Actions**

GitHub Actions is a cloud-native CI/CD platform directly integrated with GitHub repositories.

**Example: GitHub Actions Workflow with Maven:**

Create `.github/workflows/maven.yml` in your repo:

```yml
name: Java CI with Maven

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up JDK 17
      uses: actions/setup-java@v3
      with:
        distribution: 'temurin'
        java-version: '17'
        cache: 'maven'
    - name: Build with Maven
      run: mvn clean install

```

✅ Automatically runs `mvn clean install` on every push or pull request.  
✅ Caches dependencies for faster builds.

## **3\. Skipping Tests for Faster Builds**

In CI/CD pipelines, sometimes you want to build quickly without running unit tests (e.g., during prototyping).

Maven provides the `-DskipTests` flag:

```bash
mvn clean install -DskipTests

```

- **`-DskipTests`** → Compiles test code but does not run tests.
- **`-Dmaven.test.skip=true`** → Skips compiling and running test code.

📌 Use this **only when necessary** — skipping tests in production pipelines is risky.

## **4\. Deploying Artifacts to Nexus/Artifactory**

Maven can automatically deploy build artifacts (JARs, WARs, POMs) to artifact repositories such as **Sonatype Nexus** or **JFrog Artifactory**.

### Step 1: Configure `distributionManagement` in `pom.xml`

```xml
<distributionManagement>
    <repository>
        <id>releases</id>
        <url>http://nexus.example.com/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <url>http://nexus.example.com/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

```

### Step 2: Add Credentials in `settings.xml`

Located at `~/.m2/settings.xml`:

```xml
<servers>
    <server>
        <id>releases</id>
        <username>deploy_user</username>
        <password>deploy_password</password>
    </server>
    <server>
        <id>snapshots</id>
        <username>deploy_user</username>
        <password>deploy_password</password>
    </server>
</servers>

```

### Step 3: Deploy Artifact

```bash
mvn clean deploy

```

✅ Uploads the artifact to Nexus/Artifactory  
✅ Used in enterprise projects for sharing artifacts across teams

## **Best Practices for Maven in CI/CD**

- Always run **tests** in production pipelines (skip tests only in dev builds).
- Cache Maven dependencies in CI/CD for faster builds.
- Use **profiles** (`dev`, `test`, `prod`) to adapt builds to environments.
- Keep credentials in **CI/CD secrets**, not hardcoded in `pom.xml`.

## **Key Takeaways**

- Maven integrates seamlessly with CI/CD tools like **Jenkins** and **GitHub Actions**.
- Use **`-DskipTests`** for faster builds, but avoid skipping tests in production.
- Artifacts can be deployed to **Nexus** or **Artifactory** using Maven’s `deploy` phase.