Skip to content

Building with Maven

This guide covers building, testing, and packaging the Authentication Test API using Apache Maven.

Project Location

All Maven commands should be run from the API_server/ directory where the pom.xml file is located.

Maven Lifecycle

Maven uses a standard build lifecycle with these main phases:

clean → validate → compile → test → package → verify → install → deploy

Basic Build Commands

Clean Build

Remove all generated files and start fresh:

cd API_server
mvn clean

This deletes the target/ directory within API_server/.

Compile

Compile the source code without running tests:

cd API_server
mvn compile

Output: Compiled classes in API_server/target/classes/

Run Tests

Execute unit tests:

cd API_server
mvn test

Package

Create the WAR file:

cd API_server
mvn package

Output: API_server/target/authentication-test-api.war

Full Build

Clean, compile, test, and package in one command:

cd API_server
mvn clean package

This is the most common build command.

Development Mode

Liberty Dev Mode

Run the application with hot reload:

cd API_server
mvn liberty:dev

Features: - Hot Reload: Automatically recompiles and redeploys on code changes - Test on Save: Runs tests when files change - Debug Ready: Debug port available on 7777 - Interactive: Press Enter to run tests, r to restart

Exit with Ctrl+C.

Skip Tests

Build without running tests (faster):

cd API_server
mvn clean package -DskipTests

Warning

Only skip tests during development. Always run tests before committing code.

Advanced Build Options

Update Dependencies

Force update of all dependencies:

cd API_server
mvn clean install -U

The -U flag forces Maven to check for updated snapshots.

Offline Build

Build without downloading dependencies:

cd API_server
mvn clean package -o

Requires all dependencies to be in local repository.

Verbose Output

Show detailed build information:

cd API_server
mvn clean package -X

Useful for debugging build issues.

Parallel Builds

Build faster using multiple threads:

cd API_server
mvn clean package -T 4

Uses 4 threads. Adjust based on your CPU cores.

Build Profiles

Development Profile

cd API_server
mvn clean package -Pdev

Production Profile

cd API_server
mvn clean package -Pprod

Note

Profiles are defined in API_server/pom.xml and can customize build behavior.

Liberty Maven Plugin

Start Server

Start OpenLiberty server:

cd API_server
mvn liberty:start

Server runs in background.

Stop Server

Stop the running server:

cd API_server
mvn liberty:stop

Run Server

Start server in foreground:

cd API_server
mvn liberty:run

Exit with Ctrl+C.

Create Server Package

Create a runnable server package:

cd API_server
mvn liberty:package

Output: API_server/target/authentication-test-api.zip

Deploy Application

Deploy WAR to running server:

cd API_server
mvn liberty:deploy

Build Output

Directory Structure

After a successful build:

API_server/target/
├── authentication-test-api.war          # Deployable WAR file
├── authentication-test-api/             # Exploded WAR
├── classes/                             # Compiled classes
├── generated-sources/                   # Generated code
├── maven-archiver/                      # Maven metadata
├── maven-status/                        # Build status
└── test-classes/                        # Compiled test classes

WAR File Contents

The generated WAR file contains:

authentication-test-api.war
├── WEB-INF/
│   ├── classes/                         # Application classes
│   │   └── com/example/api/
│   ├── lib/                             # Dependencies (if any)
│   └── web.xml                          # Web descriptor (optional)
└── META-INF/
    └── MANIFEST.MF                      # Manifest file

Dependency Management

List Dependencies

Show all project dependencies:

cd API_server
mvn dependency:tree

Analyze Dependencies

Check for unused or undeclared dependencies:

cd API_server
mvn dependency:analyze

Download Sources

Download source JARs for dependencies:

cd API_server
mvn dependency:sources

Useful for IDE debugging.

Download Javadocs

Download Javadoc JARs:

cd API_server
mvn dependency:resolve -Dclassifier=javadoc

Testing

Run Specific Test

Run a single test class:

cd API_server
mvn test -Dtest=HelloResourceTest

Run Test Method

Run a specific test method:

cd API_server
mvn test -Dtest=HelloResourceTest#testHelloEndpoint

Skip Tests

Skip test compilation and execution:

cd API_server
mvn package -Dmaven.test.skip=true

Test Coverage

Generate test coverage report (requires jacoco plugin):

cd API_server
mvn clean test jacoco:report

Report: API_server/target/site/jacoco/index.html

Code Quality

Compile with Warnings

Show all compiler warnings:

cd API_server
mvn clean compile -Xlint:all

Format Code

Format code according to style rules (requires formatter plugin):

cd API_server
mvn formatter:format

Troubleshooting

Clear Local Repository

If dependencies are corrupted:

# Remove project dependencies from local repo
rm -rf ~/.m2/repository/com/example/authentication-test-api

# Rebuild
cd API_server
mvn clean install -U

Increase Memory

If build runs out of memory:

export MAVEN_OPTS="-Xmx2048m -XX:MaxPermSize=512m"
cd API_server
mvn clean package

Debug Build

Run Maven in debug mode:

cd API_server
mvn clean package -X > build.log 2>&1

Review build.log for detailed information.

Dependency Conflicts

Resolve dependency conflicts:

cd API_server
mvn dependency:tree -Dverbose

Look for conflicts marked with (omitted for conflict with X.Y.Z).

Build Best Practices

1. Always Clean Before Release

cd API_server
mvn clean package

Ensures no stale artifacts.

2. Run Tests

cd API_server
mvn clean verify

Runs all tests including integration tests.

3. Check for Updates

cd API_server
mvn versions:display-dependency-updates
mvn versions:display-plugin-updates

4. Verify Build Reproducibility

cd API_server
mvn clean package
mvn clean package
diff target/authentication-test-api.war target/authentication-test-api.war

Builds should be identical.

CI/CD Integration

GitHub Actions

- name: Build with Maven
  run: |
    cd API_server
    mvn clean package -B

GitLab CI

build:
  script:
    - cd API_server
    - mvn clean package

Jenkins

sh 'cd API_server && mvn clean package'

Next Steps

Additional Resources