Learn to create spring boot project having multiple modules. The parent project will work as container for base maven configurations. The child modules will be actual spring boot projects – inheriting the maven properties from parent project.
1. Spring boot maven parent project
The parent project is single point to trigger build process for all the modules and optionally generate a deployable package (e.g. ear, war etc). It’s pom.xml file consist the list of all modules as well as common dependencies and properties inherited by child projects.
As we are creating spring boot project, we will need to add spring-boot-starter-parent dependency. It is the parent POM providing dependency and plugin management for Spring Boot-based applications.
It contains the default versions of Java to use, the default versions of dependencies that Spring Boot uses, and the default configuration of the Maven plugins.
$ mvn archetype:generate -DgroupId=com.howtodoinjava -DartifactId=HelloWorldApp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode= false |
<? xml version = "1.0" encoding = "UTF-8" ?> < modelVersion >4.0.0</ modelVersion > < groupId >com.howtodoinjava</ groupId > < artifactId >HelloWorldApp</ artifactId > < packaging >pom</ packaging > < version >1.0-SNAPSHOT</ version > < name >HelloWorldApp</ name > < parent > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-parent</ artifactId > < version >2.1.0.RELEASE</ version > < relativePath /> <!-- lookup parent from repository --> </ parent > < properties > < project.build.sourceEncoding >UTF-8</ project.build.sourceEncoding > < maven.compiler.source >1.8</ maven.compiler.source > < maven.compiler.target >1.8</ maven.compiler.target > </ properties > < modules > < module >HelloWorldApp-ear</ module > < module >HelloWorldApp-service</ module > < module >HelloWorldApp-rws</ module > </ modules > < dependencies > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-test</ artifactId > < scope >test</ scope > </ dependency > </ dependencies > </ project > |
2. Child modules – ear, war, jar
The child modules can be any project and can be creating any packaging. We can create any kind of dependency between modules and bundle them together as well. It is very much individual’s requirement specific.
In out case, we are creating an ear file, a war file and a jar file. Jar file is bundled into war file, which is bundled into ear file. The ear file is final package to be deployed to on application servers.
$ cd HelloWorldApp $ mvn archetype:generate -DgroupId=com.howtodoinjava -DartifactId=HelloWorldApp-ear -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode= false $ mvn archetype:generate -DgroupId=com.howtodoinjava -DartifactId=HelloWorldApp-service -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode= false $ mvn archetype:generate -DgroupId=com.howtodoinjava -DartifactId=HelloWorldApp-rws -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode= false |
Please add the 3rd-party libraries and dependecies as per requirements.
2.1. jar package
<? xml version = "1.0" ?> < project < modelVersion >4.0.0</ modelVersion > < parent > < groupId >com.howtodoinjava</ groupId > < artifactId >HelloWorldApp</ artifactId > < version >1.0-SNAPSHOT</ version > </ parent > < artifactId >HelloWorldApp-service</ artifactId > < name >HelloWorldApp-service</ name > < dependencies > < dependency > < groupId >com.h2database</ groupId > < artifactId >h2</ artifactId > < scope >runtime</ scope > </ dependency > </ dependencies > </ project > |
2.2. war package
<? xml version = "1.0" ?> < project < modelVersion >4.0.0</ modelVersion > < parent > < groupId >com.howtodoinjava</ groupId > < artifactId >HelloWorldApp</ artifactId > < version >1.0-SNAPSHOT</ version > </ parent > < artifactId >HelloWorldApp-rws</ artifactId > < packaging >war</ packaging > < name >HelloWorldApp-rws Maven Webapp</ name > < dependencies > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-web</ artifactId > </ dependency > <!-- Package jar in the war file --> < dependency > < groupId >com.howtodoinjava</ groupId > < artifactId >HelloWorldApp-service</ artifactId > < version >1.0-SNAPSHOT</ version > </ dependency > </ dependencies > < build > < finalName >HelloWorldApp-rws</ finalName > </ build > </ project > |
2.3. ear package
<? xml version = "1.0" ?> < project < modelVersion >4.0.0</ modelVersion > < parent > < groupId >com.howtodoinjava</ groupId > < artifactId >HelloWorldApp</ artifactId > < version >1.0-SNAPSHOT</ version > </ parent > < artifactId >HelloWorldApp-ear</ artifactId > < name >HelloWorldApp-ear</ name > < packaging >ear</ packaging > < dependencies > <!-- Package war in the ear file --> < dependency > < groupId >com.howtodoinjava</ groupId > < artifactId >HelloWorldApp-rws</ artifactId > < version >1.0-SNAPSHOT</ version > < type >war</ type > </ dependency > </ dependencies > <!-- Plugin to bundle the ear file--> < build > < pluginManagement > < plugins > < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-ear-plugin</ artifactId > < version >3.0.1</ version > < configuration > < finalName >HelloWorldApp-${project.version}</ finalName > < modules > < webModule > < groupId >com.howtodoinjava</ groupId > < artifactId >HelloWorldApp-rws</ artifactId > < uri >HelloWorldApp-rws-1.0-SNAPSHOT.war</ uri > <!-- Set custom context root --> < contextRoot >/application</ contextRoot > </ webModule > </ modules > </ configuration > </ plugin > </ plugins > </ pluginManagement > </ build > </ project > |
3. Maven build
To compile and build all projects in single command, go to parent project and run ‘mvn clean install’ command. This command will generate us an ear file with name HelloWorldApp-1.0-SNAPSHOT.ear
.
E:\HelloWorldApp>mvn clean install ... ... ... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] HelloWorldApp 1.0 -SNAPSHOT ......................... SUCCESS [ 0.428 s] [INFO] HelloWorldApp-service .............................. SUCCESS [ 1.000 s] [INFO] HelloWorldApp-rws Maven Webapp ..................... SUCCESS [ 1.322 s] [INFO] HelloWorldApp-ear 1.0 -SNAPSHOT ..................... SUCCESS [ 0.813 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.063 s [INFO] Finished at: 2018 - 11 -19T09: 28 : 31 + 05 : 30 [INFO] ------------------------------------------------------------------------ |
Happy Learning !!
No comments:
Post a Comment