Skip to content

agileactors/java-maven-issues

Repository files navigation

Maven Issues Demonstration

This repository demonstrates the most common Maven issues with working examples and fixes.

Issues Covered

  • Test libraries in production JARs
  • Server-provided libraries included
  • Runtime dependencies at compile time
  • Examples: JUnit as compile, Servlet API missing provided scope
  • Missing <dependencyManagement> section
  • Version conflicts between related libraries
  • Inconsistent versions across modules
  • Examples: Mixed Spring versions, missing SLF4J version
  • Different libraries bringing conflicting versions
  • Runtime ClassNotFoundException errors
  • API breaking changes
  • Examples: SLF4J 1.7 vs 2.0, Guava version conflicts
  • Same artifact with different versions
  • Multiple libraries doing same thing
  • Bloated classpath and JAR size
  • Examples: Multiple JSON libraries, logging implementations
  • Missing plugin versions (uses Maven defaults)
  • Outdated plugin versions
  • Inconsistent behavior across environments
  • Examples: Compiler plugin without version, old JAR plugin
  • Modules depending on each other in circles
  • Build failures and compilation loops
  • Architecture problems
  • Examples: Module A ↔ Module B dependency cycle
  • Direct dependencies forcing inheritance
  • Missing dependency/plugin management
  • Version conflicts between parent/children
  • Examples: Forced Spring inheritance, hardcoded Java 8
  • Wrong module build order
  • Version drift between sibling modules
  • Hardcoded inter-module versions
  • Examples: Dependencies built before their dependencies

How to Use

Each issue directory contains:

  • pom.xml - Problematic configuration
  • pom-fixed.xml or fixed/ - Correct solution
  • README.md - Detailed explanation and commands

Running Examples

# Try to build the problematic examples (they will fail/conflict)
cd issue1-wrong-scopes && mvn clean compile

# Build the fixed versions (they work correctly)
cd issue1-wrong-scopes/fixed && mvn clean compile

Useful Maven Commands for Analysis

# Show dependency tree
mvn dependency:tree

# Find conflicts
mvn dependency:analyze

# Check for updates
mvn versions:display-dependency-updates
mvn versions:display-plugin-updates

# Validate configuration
mvn validate

# Show effective POM
mvn help:effective-pom

Key Takeaways

  1. Use Dependency Management: Central version control without forced inheritance
  2. Correct Scopes: test, provided, runtime, compile appropriately
  3. Plugin Versions: Always specify plugin versions explicitly
  4. BOM Imports: Use framework BOMs for consistent versions
  5. Multi-module Order: Build foundation modules first
  6. Avoid Circles: Design clear dependency hierarchies
  7. Version Consistency: Use properties and ${project.version}

Common Patterns for Fixes

  • Replace <dependencies> with <dependencyManagement> in parent POMs
  • Add <exclusions> to resolve transitive conflicts
  • Use ${project.version} for inter-module dependencies
  • Import BOMs with <type>pom</type><scope>import</scope>
  • Add <pluginManagement> for consistent plugin versions
  • Extract common interfaces to break circular dependencies

About

Java Maven Issues

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages