Your SlideShare is downloading. ×
System Architecture using Maven Modularity
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

System Architecture using Maven Modularity

1,491

Published on

Splits product modularity to three logical parts. Explains dependency management in real scenario. Fixes hell of duplicate versions.

Splits product modularity to three logical parts. Explains dependency management in real scenario. Fixes hell of duplicate versions.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,491
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. System Architecture using Maven ModularityTibor DigaňaGithub repositoryhttps://github.com/Tibor17/maven/tree/master/architecture/modularity
  • 2. Goal• To split product modularity to 3 logical parts• Dependencies Management• Run out of the hell of duplicate and conflicting versions
  • 3. Agenda• Explanatory picture• Dependency Management in Maven• Product’s projects (Maven)• Internal projects (Maven)• External artifacts (Maven)
  • 4. Three Parts of Architecture• Maven projects of a product• Maven artifacts of internal projects• Maven external artifacts - repository
  • 5. Maven Dependency Managementsplits to three Build Of Material POMs• Product’s dependencyManagement located in com.xyz:product-bom:pom:1.0.0• Internal projects dependencyManagement located in com.xyz:internal-bundles-bom:pom:1.0.0• External artifacts (in a repository) dependencyManagement located in com.xyz:external-bundles-bom:pom:1.0.0
  • 6. Explanatory Picture
  • 7. Product’s Projects• See the previous picture, artifacts namely: com.xyz:product-bundle-3:jar:1.0.0 com.xyz:product-bundle-2:jar:1.0.0 com.xyz:product-bundle-1:jar:1.0.0• extend from POM com.xyz:product-bom:pom:1.0.0 which has only dependencyManagement and specifies product Maven modules namely product-bundle-3 product-bundle-2 product-bundle-1
  • 8. Internal Projects• See the previous picture, artifacts namely: com.xyz:internal-bundle-1:jar:1.0.0 com.xyz:internal-bundle-2:jar:1.0.0 com.xyz:internal-bundle-3:jar:1.0.0• extend from POM com.xyz:internal-bundles-bom:pom:1.0.0 which has only dependencyManagement and specifies product Maven modules namely internal-bundle-1 internal-bundle-2 internal-bundle-3
  • 9. External Artifacts• No projects with sources• Only repositories with deployed open source artifacts• Only POM with dependencyManagement e.g.:
  • 10. Common BOM’s parentAll three BOM projects have common parent; e.g.:<parent> <groupId>com.xyz</groupId> <artifactId>modularity</artifactId> <version>1.0.0</version></parent>The parent is important to compile all from scratch.
  • 11. com.xyz:product-bom:pom:1.0.0
  • 12. com.xyz:product-bom:pom:1.0.0The project does not validate by itself because newinternal-bundles-bom does not exist in repository.Therefore deploy with new expected versions:1. First alternative – Physically deploy external bundles to your repository – Using external-bundles-bom: mvn deploy – Using internal-bundles-bom: mvn deploy – Deploy product using product-bom: mvn deploy2. Second alternative, use the top parent with new children versions: – Simply deploy using top parent com.xyz:modularity:1.0.0
  • 13. com.xyz:internal-bundles-bom:pom:1.0.0
  • 14. com.xyz:internal-bundles-bom:pom:1.0.0In order to deploy internal bundles:• Prepare repository with external artifacts• Resolve conflicts on external artifacts
  • 15. Resolve conflicting versions• Exclusions applied only to external artifacts.• Conflicts are resolved by increased version (except for major version)
  • 16. Example of resolving conflicts on external bundlescom.xyz:external-bundles-bom:pom:1.0.0
  • 17. Dependency Management Violation• </dependencyManagement> declares dependencies by POM packaging project• </dependencies> uses artifacts in children• Properties specifying artifacts versions violate the whole idea of dependencyManagementSee the link (project with <artifactId>bom</artifactId>)http://maven.apache.org/guides/introduction/introduction-to- dependency-mechanism.html#Importing_Dependencies
  • 18. Thank you! Download Sourceshttps://github.com/Tibor17/maven/tree/master/architecture/modularity

×