Maven – Web Application

Maven – Web Application ”; Previous Next This chapter teaches you how to manage a web based project using Maven. Here you will learn how to create/build/deploy and run a web application. Create Web Application To create a simple java web application, we will use maven-archetype-webapp plugin. So, let”s open the command console, go to the C:MVN directory and execute the following mvn command. C:MVN>mvn archetype:generate -DgroupId = com.companyname.automobile -DartifactId = trucks -DarchetypeArtifactId = maven-archetype-webapp -DinteractiveMode = false Maven will start processing and will create the complete web based java application project structure as follows − C:MVN>mvn archetype:generate -DgroupId=com.companyname.automobile -DartifactId=trucks -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false [INFO] Scanning for projects… [INFO] [INFO] ——————< org.apache.maven:standalone-pom >——————- [INFO] Building Maven Stub Project (No POM) 1 [INFO] ——————————–[ pom ]——————————— … [INFO] —————————————————————————- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-webapp:1.0 [INFO] —————————————————————————- [INFO] Parameter: basedir, Value: C:MVN [INFO] Parameter: package, Value: com.companyname.automobile [INFO] Parameter: groupId, Value: com.companyname.automobile [INFO] Parameter: artifactId, Value: trucks [INFO] Parameter: packageName, Value: com.companyname.automobile [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: C:MVNtrucks [INFO] ———————————————————————— [INFO] BUILD SUCCESS [INFO] ———————————————————————— [INFO] Total time: 10.381 s [INFO] Finished at: 2021-12-13T19:00:13+05:30 [INFO] ———————————————————————— C:MVN> Now go to C:/MVN directory. You”ll see a java application project created, named trucks (as specified in artifactId) as specified in the following snapshot. The following directory structure is generally used for web applications − Maven uses a standard directory layout. Using the above example, we can understand the following key concepts − Sr.No. Folder Structure & Description 1 trucks contains src folder and pom.xml. 2 src/main/webapp contains index.jsp and WEB-INF folder. 3 src/main/webapp/WEB-INF contains web.xml 4 src/main/resources it contains images/properties files. POM.xml <project xmlns = “http://maven.apache.org/POM/4.0.0” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation = “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd”> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.automobile</groupId> <artifactId>trucks</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>trucks Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>trucks</finalName> </build> </project> If you observe, you will find that Maven also created a sample JSP Source file. Open C: > MVN > trucks > src > main > webapp > folder to see index.jsp with the following code − <html> <body> <h2>Hello World!</h2> </body> </html> Build Web Application Let”s open the command console, go to the C:MVNtrucks directory and execute the following mvn command. C:MVNtrucks>mvn clean package Maven will start building the project. C:MVNtrucks>mvn clean package [INFO] Scanning for projects… [INFO] [INFO] —————–< com.companyname.automobile:trucks >—————— [INFO] Building trucks Maven Webapp 1.0-SNAPSHOT [INFO] ——————————–[ war ]——————————— [INFO] [INFO] — maven-clean-plugin:2.5:clean (default-clean) @ trucks — [INFO] Deleting C:MVNtruckstarget [INFO] [INFO] — maven-resources-plugin:2.6:resources (default-resources) @ trucks — [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ trucks — [INFO] No sources to compile [INFO] [INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ trucks — [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNtruckssrctestresources [INFO] [INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ trucks — [INFO] No sources to compile [INFO] [INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ trucks — [INFO] No tests to run. [INFO] [INFO] — maven-war-plugin:2.2:war (default-war) @ trucks — WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by com.thoughtworks.xstream.core.util.Fields (file:/C:/Users/intel/.m2/repository/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar) to field java.util.Properties.defaults WARNING: Please consider reporting this to the maintainers of com.thoughtworks.xstream.core.util.Fields WARNING: Use –illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release [INFO] Packaging webapp [INFO] Assembling webapp [trucks] in [C:MVNtruckstargettrucks] [INFO] Processing war project [INFO] Copying webapp resources [C:MVNtruckssrcmainwebapp] [INFO] Webapp assembled in [50 msecs] [INFO] Building war: C:MVNtruckstargettrucks.war [INFO] WEB-INFweb.xml already added, skipping [INFO] ———————————————————————— [INFO] BUILD SUCCESS [INFO] ———————————————————————— [INFO] Total time: 2.494 s [INFO] Finished at: 2021-12-13T19:02:15+05:30 [INFO] ———————————————————————— C:MVNtrucks> Deploy Web Application Now copy the trucks.war created in C: > MVN > trucks > target > folder to your webserver webapp directory and restart the webserver. Test Web Application Run the web-application using URL: http://<server-name>:<port-number>/trucks/index.jsp. Verify the output. Print Page Previous Next Advertisements ”;

Maven – Useful Resources

Maven – Useful Resources ”; Previous Next The following resources contain additional information on Maven. Please use them to get more in-depth knowledge on this topic. Useful Video Courses DevOps CI/CD Pipeline With Jenkins Ansible Docker and Kubernetes Best Seller 42 Lectures 5 hours AR Shankar More Detail Learn Maven and Ant the easy way! Most Popular 35 Lectures 4 hours Karthikeya T More Detail JSP and Servlets – The Complete Course 43 Lectures 5.5 hours TELCOMA Global More Detail Learn Maven 14 Lectures 1.5 hours Quaatso Learning More Detail Maven Online Training 14 Lectures 5.5 hours Uplatz More Detail Create a Spring Boot Restful web app with Java 11 and Maven 11 Lectures 32 mins Dimitrios Malonas More Detail Print Page Previous Next Advertisements ”;

Maven – Overview

Maven – Overview ”; Previous Next What is Maven? Maven is a project management and comprehension tool that provides developers a complete build lifecycle framework. Development team can automate the project”s build infrastructure in almost no time as Maven uses a standard directory layout and a default build lifecycle. In case of multiple development teams environment, Maven can set-up the way to work as per standards in a very short time. As most of the project setups are simple and reusable, Maven makes life of developer easy while creating reports, checks, build and testing automation setups. Maven provides developers ways to manage the following − Builds Documentation Reporting Dependencies SCMs Releases Distribution Mailing list To summarize, Maven simplifies and standardizes the project build process. It handles compilation, distribution, documentation, team collaboration and other tasks seamlessly. Maven increases reusability and takes care of most of the build related tasks. Maven Evolution Maven was originally designed to simplify building processes in Jakarta Turbine project. There were several projects and each project contained slightly different ANT build files. JARs were checked into CVS. Apache group then developed Maven which can build multiple projects together, publish projects information, deploy projects, share JARs across several projects and help in collaboration of teams. Objective The primary goal of Maven is to provide developer with the following − A comprehensive model for projects, which is reusable, maintainable, and easier to comprehend. Plugins or tools that interact with this declarative model. Maven project structure and contents are declared in an xml file, pom.xml, referred as Project Object Model (POM), which is the fundamental unit of the entire Maven system. In later chapters, we will explain POM in detail. Convention over Configuration Maven uses Convention over Configuration, which means developers are not required to create build process themselves. Developers do not have to mention each and every configuration detail. Maven provides sensible default behavior for projects. When a Maven project is created, Maven creates default project structure. Developer is only required to place files accordingly and he/she need not to define any configuration in pom.xml. As an example, following table shows the default values for project source code files, resource files and other configurations. Assuming, ${basedir} denotes the project location − Item Default source code ${basedir}/src/main/java Resources ${basedir}/src/main/resources Tests ${basedir}/src/test Complied byte code ${basedir}/target distributable JAR ${basedir}/target/classes In order to build the project, Maven provides developers with options to mention life-cycle goals and project dependencies (that rely on Maven plugin capabilities and on its default conventions). Much of the project management and build related tasks are maintained by Maven plugins. Developers can build any given Maven project without the need to understand how the individual plugins work. We will discuss Maven Plugins in detail in the later chapters. Features of Maven Simple project setup that follows best practices. Consistent usage across all projects. Dependency management including automatic updating. A large and growing repository of libraries. Extensible, with the ability to easily write plugins in Java or scripting languages. Instant access to new features with little or no extra configuration. Model-based builds − Maven is able to build any number of projects into predefined output types such as jar, war, metadata. Coherent site of project information − Using the same metadata as per the build process, maven is able to generate a website and a PDF including complete documentation. Release management and distribution publication − Without additional configuration, maven will integrate with your source control system such as CVS and manages the release of a project. Backward Compatibility − You can easily port the multiple modules of a project into Maven 3 from older versions of Maven. It can support the older versions also. Automatic parent versioning − No need to specify the parent in the sub module for maintenance. Parallel builds − It analyzes the project dependency graph and enables you to build schedule modules in parallel. Using this, you can achieve the performance improvements of 20-50%. Better Error and Integrity Reporting − Maven improved error reporting, and it provides you with a link to the Maven wiki page where you will get full description of the error. Print Page Previous Next Advertisements ”;

Maven – Build Profiles

Maven – Build Profiles ”; Previous Next What is Build Profile? A Build profile is a set of configuration values, which can be used to set or override default values of Maven build. Using a build profile, you can customize build for different environments such as Production v/s Development environments. Profiles are specified in pom.xml file using its activeProfiles/profiles elements and are triggered in variety of ways. Profiles modify the POM at build time, and are used to give parameters different target environments (for example, the path of the database server in the development, testing, and production environments). Types of Build Profile Build profiles are majorly of three types. Type Where it is defined Per Project Defined in the project POM file, pom.xml Per User Defined in Maven settings xml file (%USER_HOME%/.m2/settings.xml) Global Defined in Maven global settings xml file (%M2_HOME%/conf/settings.xml) Profile Activation A Maven Build Profile can be activated in various ways. Explicitly using command console input. Through maven settings. Based on environment variables (User/System variables). OS Settings (for example, Windows family). Present/missing files. Profile Activation Examples Let us assume the following directory structure of your project − Now, under src/main/resources, there are three environment specific files − Sr.No. File Name & Description 1 env.properties default configuration used if no profile is mentioned. 2 env.test.properties test configuration when test profile is used. 3 env.prod.properties production configuration when prod profile is used. Explicit Profile Activation In the following example, we will attach maven-antrun-plugin:run goal to test the phase. This will allow us to echo text messages for different profiles. We will be using pom.xml to define different profiles and will activate profile at command console using maven command. Assume, we”ve created the following pom.xml in C:MVNproject folder. <project xmlns = “http://maven.apache.org/POM/4.0.0″ xmlns:xsi = “http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation = “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <profiles> <profile> <id>test</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <phase>test</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>Using env.test.properties</echo> <copy file=”src/main/resources/env.test.properties” tofile=”${project.build.outputDirectory}/env.properties”/> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> </project> Now open the command console, go to the folder containing pom.xml and execute the following mvn command. Pass the profile name as argument using -P option. C:MVNproject>mvn test -Ptest Maven will start processing and displaying the result of test build profile. C:MVN>mvn test -Ptest [INFO] Scanning for projects… [INFO] [INFO] —————-< com.companyname.projectgroup:project >—————- [INFO] Building project 1.0 [INFO] ——————————–[ jar ]——————————— [INFO] [INFO] — maven-resources-plugin:2.6:resources (default-resources) @ project — [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 3 resources [INFO] [INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ project — [INFO] No sources to compile [INFO] [INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ project — [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNsrctestresources [INFO] [INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ project — [INFO] No sources to compile [INFO] [INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ project — [INFO] No tests to run. [INFO] [INFO] — maven-antrun-plugin:1.1:run (default) @ project — [INFO] Executing tasks [echo] Using env.test.properties [INFO] Executed tasks [INFO] ———————————————————————— [INFO] BUILD SUCCESS [INFO] ———————————————————————— [INFO] Total time: 2.011 s [INFO] Finished at: 2021-12-10T20:29:39+05:30 [INFO] ———————————————————————— C:MVN> Now as an exercise, you can perform the following steps − Add another profile element to profiles element of pom.xml (copy existing profile element and paste it where profile elements ends). Update id of this profile element from test to normal. Update task section to echo env.properties and copy env.properties to target directory. Again repeat the above three steps, update id to prod and task section for env.prod.properties. That”s all. Now you”ve three build profiles ready (normal/test/prod). Now open the command console, go to the folder containing pom.xml and execute the following mvn commands. Pass the profile names as argument using -P option. C:MVNproject>mvn test -Pnormal C:MVNproject>mvn test -Pprod Check the output of the build to see the difference. Profile Activation via Maven Settings Open Maven settings.xml file available in %USER_HOME%/.m2 directory where %USER_HOME% represents the user home directory. If settings.xml file is not there, then create a new one. Add test profile as an active profile using active Profiles node as shown below in example. <settings xmlns = “http://maven.apache.org/POM/4.0.0″ xmlns:xsi = “http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd”> <mirrors> <mirror> <id>maven.dev.snaponglobal.com</id> <name>Internal Artifactory Maven repository</name> <url>http://repo1.maven.org/maven2/</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors> <activeProfiles> <activeProfile>test</activeProfile> </activeProfiles> </settings> Now open command console, go to the folder containing pom.xml and execute the following mvn command. Do not pass the profile name using -P option. Maven will display result of test profile being an active profile. C:MVNproject>mvn test Profile Activation via Environment Variables Now remove active profile from maven settings.xml and update the test profile mentioned in pom.xml. Add activation element to profile element as shown below. The test profile will trigger when the system property “env” is specified with the value “test”. Create an environment variable “env” and set its value as “test”. <profile> <id>test</id> <activation> <property> <name>env</name> <value>test</value> </property> </activation> </profile> Let”s open command console, go to the folder containing pom.xml and execute the following mvn command. C:MVNproject>mvn test Profile Activation via Operating System Activation element to include os detail as shown below. This test profile will trigger when the system is windows XP. <profile> <id>test</id> <activation> <os> <name>Windows XP</name> <family>Windows</family> <arch>x86</arch> <version>5.1.2600</version> </os> </activation> </profile> Now open command console, go to the folder containing pom.xml and execute the following mvn commands.

Maven – Project Documents

Maven – Project Documents ”; Previous Next This tutorial will teach you how to create documentation of the application in one go. So let”s start, go to C:/MVN directory where you had created your java consumerBanking application using the examples given in the previous chapters. Open consumerBanking folder and execute the following mvn command. Update, the pom.xml in C:MVNconsumerBanking folder as shown below. <project xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd”> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.bank</groupId> <artifactId>consumerBanking</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>consumerBanking</name> <url>http://maven.apache.org</url> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>3.7</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> <version>2.9</version> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> C:MVNconsumerBanking>mvn site Maven will start building the project. [INFO] Scanning for projects… [INFO] [INFO] —————-< com.companyname.bank:consumerBanking >—————- [INFO] Building consumerBanking 1.0-SNAPSHOT [INFO] ——————————–[ jar ]——————————— [INFO] [INFO] — maven-site-plugin:3.7:site (default-site) @ consumerBanking — [WARNING] Input file encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent! [INFO] Relativizing decoration links with respect to localized project URL: http://maven.apache.org [INFO] Rendering site with org.apache.maven.skins:maven-default-skin:jar:1.2 skin. [INFO] ———————————————————————— [INFO] BUILD SUCCESS [INFO] ———————————————————————— [INFO] Total time: 5.850 s [INFO] Finished at: 2021-12-13T17:49:56+05:30 [INFO] ———————————————————————— Your project documentation is now ready. Maven has created a site within the target directory. Open C:MVNconsumerBankingtargetsite folder. Click on index.html to see the documentation. Maven creates the documentation using a documentation-processing engine called Doxia which reads multiple source formats into a common document model. To write documentation for your project, you can write your content in a following few commonly used formats which are parsed by Doxia. Format Name Description Reference XDoc A Maven 1.x documentation format https://jakarta.apache.org/site FML Used for FAQ documents https://maven.apache.org Print Page Previous Next Advertisements ”;

Maven – NetBeans

Maven – NetBeans ”; Previous Next NetBeans 6.7 and newer has in-built support for Maven. In case of previous version, Maven plugin is available in plugin Manager. We are using NetBeans 6.9 in this example. Some of features of NetBeans are listed below − You can run Maven goals from NetBeans. You can view the output of Maven commands inside the NetBeans using its own console. You can update maven dependencies with IDE. You can Launch Maven builds from within NetBeans. NetBeans does the dependency management automatically based on Maven”s pom.xml. NetBeans resolves Maven dependencies from its workspace without installing to local Maven repository (requires dependency project be in same workspace). NetBeans automatic downloads required dependencies and sources from the remote Maven repositories. NetBeans provides wizards for creating new Maven projects, pom.xml. NetBeans provides a Maven Repository browser that enables you to view your local repository and registered external Maven repositories. Following example will help you to leverage benefits of integrating NetBeans and Maven. Open a maven project in NetBeans Open NetBeans. Select File Menu > Open Project option. Select Project location, where a project was created using Maven. We”ve created a Java Project consumerBanking. Go to ‘Creating Java Project’ chapter, to see how to create a project using Maven. Now, you can see the maven project in NetBeans. Have a look at consumerBanking project Libraries and Test Libraries. You can see that NetBeans has added Maven dependencies to its build path. Build a maven project in NetBeans Now, Its time to build this project using maven capability of NetBeans. Right Click on consumerBanking project to open context menu. Select Clean and Build as option. Maven will start building the project. You can see the output in NetBeans Console as follows − NetBeans: Executing ”mvn.bat -Dnetbeans.execution = true clean install” NetBeans: JAVA_HOME = C:Program FilesJavajdk1.6.0_21 Scanning for projects… ———————————————————————— Building consumerBanking task-segment: [clean, install] ———————————————————————— [clean:clean] [resources:resources] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! skip non existing resourceDirectory C:MVNconsumerBankingsrcmainresources [compiler:compile] Compiling 2 source files to C:MVNconsumerBankingtargetclasses [resources:testResources] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! skip non existing resourceDirectory C:MVNconsumerBankingsrctestresources [compiler:testCompile] Compiling 1 source file to C:MVNconsumerBankingtargettest-classes [surefire:test] Surefire report directory: C:MVNconsumerBankingtargetsurefire-reports ——————————————————- T E S T S ——————————————————- Running com.companyname.bank.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.023 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [jar:jar] Building jar: C:MVNconsumerBankingtargetconsumerBanking-1.0-SNAPSHOT.jar [install:install] Installing C:MVNconsumerBankingtargetconsumerBanking-1.0-SNAPSHOT.jar to C:UsersGB3824.m2repositorycomcompanynamebankconsumerBanking 1.0-SNAPSHOTconsumerBanking-1.0-SNAPSHOT.jar ———————————————————————— BUILD SUCCESSFUL ———————————————————————— Total time: 9 seconds Finished at: Thu Jul 19 12:57:28 IST 2012 Final Memory: 16M/85M ———————————————————————— Run Application in NetBeans Now, right click on App.java. Select Run File as option. You will see the result in the NetBeans Console. NetBeans: Executing ”mvn.bat -Dexec.classpathScope = runtime -Dexec.args = -classpath %classpath com.companyname.bank.App -Dexec.executable = C:Program FilesJavajdk1.6.0_21binjava.exe -Dnetbeans.execution = true process-classes org.codehaus.mojo:exec-maven-plugin:1.1.1:exec” NetBeans: JAVA_HOME = C:Program FilesJavajdk1.6.0_21 Scanning for projects… ———————————————————————— Building consumerBanking task-segment: [process-classes, org.codehaus.mojo:exec-maven-plugin:1.1.1:exec] ———————————————————————— [resources:resources] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! skip non existing resourceDirectory C:MVNconsumerBankingsrcmainresources [compiler:compile] Nothing to compile – all classes are up to date [exec:exec] Hello World! ———————————————————————— BUILD SUCCESSFUL ———————————————————————— Total time: 1 second Finished at: Thu Jul 19 14:18:13 IST 2012 Final Memory: 7M/64M ———————————————————————— Print Page Previous Next Advertisements ”;

Maven – Manage Dependencies

Maven – Manage Dependencies ”; Previous Next One of the core features of Maven is Dependency Management. Managing dependencies is a difficult task once we”ve to deal with multi-module projects (consisting of hundreds of modules/sub-projects). Maven provides a high degree of control to manage such scenarios. Transitive Dependencies Discovery It is pretty often a case, when a library, say A, depends upon other library, say B. In case another project C wants to use A, then that project requires to use library B too. Maven helps to avoid such requirements to discover all the libraries required. Maven does so by reading project files (pom.xml) of dependencies, figure out their dependencies and so on. We only need to define direct dependency in each project pom. Maven handles the rest automatically. With transitive dependencies, the graph of included libraries can quickly grow to a large extent. Cases can arise when there are duplicate libraries. Maven provides few features to control extent of transitive dependencies. Sr.No. Feature & Description 1 Dependency mediation Determines what version of a dependency is to be used when multiple versions of an artifact are encountered. If two dependency versions are at the same depth in the dependency tree, the first declared dependency will be used. 2 Dependency management Directly specify the versions of artifacts to be used when they are encountered in transitive dependencies. For an example project C can include B as a dependency in its dependency Management section and directly control which version of B is to be used when it is ever referenced. 3 Dependency scope Includes dependencies as per the current stage of the build. 4 Excluded dependencies Any transitive dependency can be excluded using “exclusion” element. As example, A depends upon B and B depends upon C, then A can mark C as excluded. 5 Optional dependencies Any transitive dependency can be marked as optional using “optional” element. As example, A depends upon B and B depends upon C. Now B marked C as optional. Then A will not use C. Dependency Scope Transitive Dependencies Discovery can be restricted using various Dependency Scope as mentioned below. Sr.No. Scope & Description 1 compile This scope indicates that dependency is available in classpath of project. It is default scope. 2 provided This scope indicates that dependency is to be provided by JDK or web-Server/Container at runtime. 3 runtime This scope indicates that dependency is not required for compilation, but is required during execution. 4 test This scope indicates that the dependency is only available for the test compilation and execution phases. 5 system This scope indicates that you have to provide the system path. 6 import This scope is only used when dependency is of type pom. This scope indicates that the specified POM should be replaced with the dependencies in that POM”s <dependencyManagement> section. Dependency Management Usually, we have a set of project under a common project. In such case, we can create a common pom having all the common dependencies and then make this pom, the parent of sub-project”s poms. Following example will help you understand this concept. Following are the detail of the above dependency graph − App-UI-WAR depends upon App-Core-lib and App-Data-lib. Root is parent of App-Core-lib and App-Data-lib. Root defines Lib1, lib2, Lib3 as dependencies in its dependency section. App-UI-WAR <project xmlns = “http://maven.apache.org/POM/4.0.0” xmlns:xsi = “http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation = “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.groupname</groupId> <artifactId>App-UI-WAR</artifactId> <version>1.0</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>com.companyname.groupname</groupId> <artifactId>App-Core-lib</artifactId> <version>1.0</version> </dependency> </dependencies> <dependencies> <dependency> <groupId>com.companyname.groupname</groupId> <artifactId>App-Data-lib</artifactId> <version>1.0</version> </dependency> </dependencies> </project> App-Core-lib <project xmlns = “http://maven.apache.org/POM/4.0.0” xmlns:xsi = “http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation = “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> <parent> <artifactId>Root</artifactId> <groupId>com.companyname.groupname</groupId> <version>1.0</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.groupname</groupId> <artifactId>App-Core-lib</artifactId> <version>1.0</version> <packaging>jar</packaging> </project> App-Data-lib <project xmlns = “http://maven.apache.org/POM/4.0.0” xmlns:xsi = “http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation = “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> <parent> <artifactId>Root</artifactId> <groupId>com.companyname.groupname</groupId> <version>1.0</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.groupname</groupId> <artifactId>App-Data-lib</artifactId> <version>1.0</version> <packaging>jar</packaging> </project> Root <project xmlns = “http://maven.apache.org/POM/4.0.0” xmlns:xsi = “http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation = “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.groupname</groupId> <artifactId>Root</artifactId> <version>1.0</version> <packaging>pom</packaging> <dependencies> <dependency> <groupId>com.companyname.groupname1</groupId> <artifactId>Lib1</artifactId> <version>1.0</version> </dependency> </dependencies> <dependencies> <dependency> <groupId>com.companyname.groupname2</groupId> <artifactId>Lib2</artifactId> <version>2.1</version> </dependency> </dependencies> <dependencies> <dependency> <groupId>com.companyname.groupname3</groupId> <artifactId>Lib3</artifactId> <version>1.1</version> </dependency> </dependencies> </project> Now when we build App-UI-WAR project, Maven will discover all the dependencies by traversing the dependency graph and build the application. From above example, we can learn the following key concepts − Common dependencies can be placed at single place using concept of parent pom. Dependencies of App-Data-lib and App-Core-lib project are listed in Root project (See the packaging type of Root. It is POM). There is no need to specify Lib1, lib2, Lib3 as dependency in App-UI-WAR. Maven use the Transitive Dependency Mechanism to manage such detail. Print Page Previous Next Advertisements ”;

Maven – Build & Test Project

Maven – Build & Test Project ”; Previous Next What we learnt in Project Creation chapter is how to create a Java application using Maven. Now we”ll see how to build and test the application. Go to C:/MVN directory where you”ve created your java application. Open consumerBanking folder. You will see the POM.xml file with the following contents. Update it to reflect the current java version. <project xmlns = “http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation = “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> </dependency> </dependencies> </project> Here you can see, Maven already added Junit as test framework. By default, Maven adds a source file App.java and a test file AppTest.java in its default directory structure, as discussed in the previous chapter. Let”s open the command console, go the C:MVNconsumerBanking directory and execute the following mvn command. C:MVNconsumerBanking>mvn clean package Maven will start building the project. C:MVNconsumerBanking>mvn clean package [INFO] Scanning for projects… [INFO] [INFO] —————-< com.companyname.bank:consumerBanking >—————- [INFO] Building consumerBanking 1.0-SNAPSHOT [INFO] ——————————–[ jar ]——————————— [INFO] [INFO] — maven-clean-plugin:2.5:clean (default-clean) @ consumerBanking — [INFO] Deleting C:MVNconsumerBankingtarget [INFO] [INFO] — maven-resources-plugin:2.6:resources (default-resources) @ consumerBanking — [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNconsumerBankingsrcmainresources [INFO] [INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ consumerBanking — [INFO] Changes detected – recompiling the module! [WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent! [INFO] Compiling 1 source file to C:MVNconsumerBankingtargetclasses [INFO] [INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ consumerBanking — [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNconsumerBankingsrctestresources [INFO] [INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ consumerBanking — [INFO] Changes detected – recompiling the module! [WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent! [INFO] Compiling 1 source file to C:MVNconsumerBankingtargettest-classes [INFO] [INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ consumerBanking — [INFO] Surefire report directory: C:MVNconsumerBankingtargetsurefire-reports ——————————————————- T E S T S ——————————————————- Running com.companyname.bank.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.028 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] — maven-jar-plugin:2.4:jar (default-jar) @ consumerBanking — [INFO] Building jar: C:MVNconsumerBankingtargetconsumerBanking-1.0-SNAPSHOT.jar [INFO] ———————————————————————— [INFO] BUILD SUCCESS [INFO] ———————————————————————— [INFO] Total time: 4.663 s [INFO] Finished at: 2021-12-13T17:34:27+05:30 [INFO] ———————————————————————— C:MVNconsumerBanking> You”ve built your project and created final jar file, following are the key learning concepts − We give maven two goals, first to clean the target directory (clean) and then package the project build output as jar (package). Packaged jar is available in consumerBankingtarget folder as consumerBanking-1.0-SNAPSHOT.jar. Test reports are available in consumerBankingtargetsurefire-reports folder. Maven compiles the source code file(s) and then tests the source code file(s). Then Maven runs the test cases. Finally, Maven creates the package. Now open the command console, go the C:MVNconsumerBankingtargetclasses directory and execute the following java command. >java com.companyname.bank.App You will see the result as follows − Hello World! Adding Java Source Files Let”s see how we can add additional Java files in our project. Open C:MVNconsumerBankingsrcmainjavacomcompanynamebank folder, create Util class in it as Util.java. package com.companyname.bank; public class Util { public static void printMessage(String message){ System.out.println(message); } } Update the App class to use Util class. package com.companyname.bank; /** * Hello world! * */ public class App { public static void main( String[] args ){ Util.printMessage(“Hello World!”); } } Now open the command console, go the C:MVNconsumerBanking directory and execute the following mvn command. >mvn clean compile After Maven build is successful, go to the C:MVNconsumerBankingtargetclasses directory and execute the following java command. >java -cp com.companyname.bank.App You will see the result as follows − Hello World! Print Page Previous Next Advertisements ”;

Maven – Project Templates

Maven – Project Templates ”; Previous Next Maven provides users, a very large list of different types of project templates (614 in numbers) using the concept of Archetype. Maven helps users to quickly start a new java project using the following command. mvn archetype:generate What is Archetype? Archetype is a Maven plugin whose task is to create a project structure as per its template. We are going to use quickstart archetype plugin to create a simple java application here. Using Project Template Let”s open the command console, go to the C: > MVN directory and execute the following mvn command. C:MVN>mvn archetype:generate Maven will start processing and will ask to choose the required archetype. C:MVN>mvn archetype:generate [INFO] Scanning for projects… [INFO] [INFO] ——————< org.apache.maven:standalone-pom >——————- [INFO] Building Maven Stub Project (No POM) 1 [INFO] ——————————–[ pom ]——————————— [INFO] [INFO] >>> maven-archetype-plugin:3.2.0:generate (default-cli) > generate-sources @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:3.2.0:generate (default-cli) < generate-sources @ standalone-pom <<< [INFO] [INFO] [INFO] — maven-archetype-plugin:3.2.0:generate (default-cli) @ standalone-pom — [INFO] Generating project in Interactive mode [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0) Choose archetype: 1: remote -> am.ik.archetype:elm-spring-boot-blank-archetype (Blank multi project for Spring Boot + Elm) 2: remote -> am.ik.archetype:graalvm-blank-archetype (Blank project for GraalVM) … 3021: remote -> za.co.absa.hyperdrive:component-archetype_2.12 (-) Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1843: Press Enter to choose to default option (1843: maven-archetype-quickstart) Maven will ask for particular version of archetype. Choose org.apache.maven.archetypes:maven-archetype-quickstart version: 1: 1.0-alpha-1 2: 1.0-alpha-2 3: 1.0-alpha-3 4: 1.0-alpha-4 5: 1.0 6: 1.1 7: 1.3 8: 1.4 Choose a number: 8: Press Enter to choose to default option (8: maven-archetype-quickstart:1.4) Maven will ask for the project detail. Enter project detail as asked. Press Enter if the default value is provided. You can override them by entering your own value. Define value for property ”groupId”: : com.companyname.insurance Define value for property ”artifactId”: : health Define value for property ”version”: 1.0-SNAPSHOT: Define value for property ”package”: com.companyname.insurance: Maven will ask for the project detail confirmation. Press enter or press Y. Confirm properties configuration: groupId: com.companyname.insurance artifactId: health version: 1.0-SNAPSHOT package: com.companyname.insurance Y: Now Maven will start creating the project structure and will display the following − [INFO] —————————————————————————- [INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4 [INFO] —————————————————————————- [INFO] Parameter: groupId, Value: com.companyname.insurance [INFO] Parameter: artifactId, Value: health [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: package, Value: com.companyname.insurance [INFO] Parameter: packageInPathFormat, Value: com/companyname/insurance [INFO] Parameter: package, Value: com.companyname.insurance [INFO] Parameter: groupId, Value: com.companyname.insurance [INFO] Parameter: artifactId, Value: health [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Project created from Archetype in dir: C:MVNhealth [INFO] ———————————————————————— [INFO] BUILD SUCCESS [INFO] ———————————————————————— [INFO] Total time: 04:44 min [INFO] Finished at: 2021-12-13T18:52:59+05:30 [INFO] ———————————————————————— Created Project Now go to C: > MVN directory. You”ll see a java application project created, named health, which was given as artifactId at the time of project creation. Maven will create a standard directory layout for the project as shown below − Created POM.xml Maven generates a POM.xml file for the project as listed below − <project xmlns = “http://maven.apache.org/POM/4.0.0” xmlns:xsi = “http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation = “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.insurance</groupId> <artifactId>health</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>health</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> Created App.java Maven generates sample java source file, App.java for the project as listed below − Location: C: > MVN > health > src > main > java > com > companyname > insurance > App.java. package com.companyname.insurance; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( “Hello World!” ); } } Created AppTest.java Maven generates sample java source test file, AppTest.java for the project as listed below − Location: C: > MVN > health > src > test > java > com > companyname > insurance > AppTest.java. package com.companyname.insurance; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; /** * Unit test for simple App. */ public class AppTest extends TestCase { /** * Create the test case * * @param testName name of the test case */ public AppTest( String testName ) { super( testName ); } /** * @return the suite of tests being tested */ public static Test suite() { return new TestSuite( AppTest.class ); } /** * Rigourous Test :-) */ public void testApp() { assertTrue( true ); } } Now you can see the power of Maven. You can create any kind of project using single command in maven and can kick-start your development. Different Archetypes Sr.No. Archetype ArtifactIds & Description 1 maven-archetype-archetype An archetype, which contains a sample archetype. 2 maven-archetype-j2ee-simple An archetype, which contains a simplified sample J2EE application. 3 maven-archetype-mojo An archetype, which contains a sample a sample Maven plugin. 4 maven-archetype-plugin An archetype, which contains a sample Maven plugin. 5 maven-archetype-plugin-site An archetype, which contains a sample Maven plugin site. 6 maven-archetype-portlet An archetype, which contains a sample JSR-268 Portlet. 7 maven-archetype-quickstart An archetype, which contains a sample Maven project. 8 maven-archetype-simple An archetype, which contains a simple Maven project. 9 maven-archetype-site An archetype, which contains a sample Maven site to demonstrates some of the supported document types like APT, XDoc, and FML and demonstrates how to i18n your site. 10 maven-archetype-site-simple An archetype, which contains a sample Maven site. 11 maven-archetype-webapp An archetype, which contains a sample Maven Webapp project.

Maven – Repositories

Maven – Repositories ”; Previous Next What is a Maven Repository? In Maven terminology, a repository is a directory where all the project jars, library jar, plugins or any other project specific artifacts are stored and can be used by Maven easily. Maven repository are of three types. The following illustration will give an idea regarding these three types. local central remote Local Repository Maven local repository is a folder location on your machine. It gets created when you run any maven command for the first time. Maven local repository keeps your project”s all dependencies (library jars, plugin jars etc.). When you run a Maven build, then Maven automatically downloads all the dependency jars into the local repository. It helps to avoid references to dependencies stored on remote machine every time a project is build. Maven local repository by default get created by Maven in %USER_HOME% directory. To override the default location, mention another path in Maven settings.xml file available at %M2_HOME%conf directory. <settings xmlns = “http://maven.apache.org/SETTINGS/1.0.0” xmlns:xsi = “http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation = “http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd”> <localRepository>C:/MyLocalRepository</localRepository> </settings> When you run Maven command, Maven will download dependencies to your custom path. Central Repository Maven central repository is repository provided by Maven community. It contains a large number of commonly used libraries. When Maven does not find any dependency in local repository, it starts searching in central repository using following URL − https://repo1.maven.org/maven2/ Key concepts of Central repository are as follows − This repository is managed by Maven community. It is not required to be configured. It requires internet access to be searched. To browse the content of central maven repository, maven community has provided a URL − https://search.maven.org/#browse. Using this library, a developer can search all the available libraries in central repository. Remote Repository Sometimes, Maven does not find a mentioned dependency in central repository as well. It then stops the build process and output error message to console. To prevent such situation, Maven provides concept of Remote Repository, which is developer”s own custom repository containing required libraries or other project jars. For example, using below mentioned POM.xml, Maven will download dependency (not available in central repository) from Remote Repositories mentioned in the same pom.xml. <project xmlns = “http://maven.apache.org/POM/4.0.0” xmlns:xsi = “http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation = “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>com.companyname.common-lib</groupId> <artifactId>common-lib</artifactId> <version>1.0.0</version> </dependency> <dependencies> <repositories> <repository> <id>companyname.lib1</id> <url>http://download.companyname.org/maven2/lib1</url> </repository> <repository> <id>companyname.lib2</id> <url>http://download.companyname.org/maven2/lib2</url> </repository> </repositories> </project> Maven Dependency Search Sequence When we execute Maven build commands, Maven starts looking for dependency libraries in the following sequence − Step 1 − Search dependency in local repository, if not found, move to step 2 else perform the further processing. Step 2 − Search dependency in central repository, if not found and remote repository/repositories is/are mentioned then move to step 4. Else it is downloaded to local repository for future reference. Step 3 − If a remote repository has not been mentioned, Maven simply stops the processing and throws error (Unable to find dependency). Step 4 − Search dependency in remote repository or repositories, if found then it is downloaded to local repository for future reference. Otherwise, Maven stops processing and throws error (Unable to find dependency). Print Page Previous Next Advertisements ”;