============= Apache Maven ============= => Maven is a build tool => Maven is free & open source => Maven is developed using java language Note: Maven is used only for java projects build process. => Maven is used to automate java projects build process. a) Download required libraries (ex: spring, junit, kafka, redis) b) Compile source code of the project c) Execute unit test cases of the project d) package our application as jar or war file => stand-alone applications will be packaged as jar file => web-applications will be packaged as war file. => The main aim of maven is to simplify java projects build process. ============== Maven Setup ============== ### Reference Video : https://www.youtube.com/watch?v=hV1OWzYpzxo Step-1 : Install Java 17v + Setup JAVA_HOME + Setup Java Path JAVA_HOME = C:\Program Files\Java\jdk-17 Path = C:\Program Files\Java\jdk-17\bin Step-2 : Download maven software as zip file & extract it URL : https://maven.apache.org/download.cgi Step-3 : Copy maven folder into C drive (optional) Step-4 : Setup MAVEN_HOME + setup MAVEN PATH MAVEN_HOME = C:\apache-maven-3.9.8 Path : C:\apache-maven-3.9.8\bin Step-5 : Verify maven installation in cmd $ mvn -v ================== Maven Terminology ================== 1) ArcheType : Type of project (quick-start / web) 2) groupId : Company name (which company developing this project) (ex: in.ashokit) 3) artifactId : Project Name 4) version : SNAPSHOT / RELEASE 5) packaging : jar or war 6) dependencies : libraries (jars) 7) repositories : Location where jars are stored (ex: central / remote / local) 8) goals : To perform build process - clean - compile - test - package - install 9) pom : Project Object Model (maven project config file) ============================ Working with Maven Project ============================ => We can create maven project in 2 ways 1) Command Prompt (cmd) 2) IDE (eclipse/ STS / Intelli J) =============================== Maven Project Creation in CLI =============================== # Open cmd and execute below command to create maven project (quick-start) mvn -B archetype:generate -DgroupId=in.ashokit -DartifactId=my-first-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 # navigate into project directory cd my-first-app # execute maven goals mvn clean mvn compile mvn test mvn package mvn install mvn clean package => clean + compile + test + package mvn clean install => clean + compile + test + package + install Note: install goal is storing our project jar file in maven local repository Local Repo Location : C://users/username/.m2 =============================== Maven Project Creation in IDE =============================== => By default maven is integrated with all java based IDEs Ex: Eclipse, STS, IntelliJ IDEA... => We can create maven project directley in above IDEs => Creating Maven Project in IntelliJ IDEA File -> New -> Project -> Select Java -> Select Build System as Maven -> Advanced Settings - groupId - artifactId -> Create Project => We can open cmd in IDE directley (Terminal -> Choose Command Prompt) Shortcut : Alt + F12 => In this terminal we can execute maven goals directley. mvn clean package ==================== Maven Dependencies ==================== => Libraries required to develop our java applications are called as Maven dependencies. Ex: a) spring-core b) spring-jdbc c) spring-boot-starter d) jackson e) junit f) log4j => We need to add required dependencies in maven project pom.xml file. => When we add dependencies in pom.xml file then maven will download those dependencies and will add to project build path. => Maven dependencies we can find in below website url : www.mvnrepository.com org.springframework spring-context 6.1.11 Note: After adding dependency in pom.xml file then right click on project -> Maven -> Reload Project. Note: We can see librarires downloaded in External Libraries folder => Maven will take care of "transitive-dependency" management. spring-context => core + beans + aop + jcl spring-jdbc ==> spring-jdbc + spring-tx advantage: downloading child dependencies automatically dis-advantage: downloading unwanted dependencies also (they will waste jvms memory) => If we want remove unwanted child dependencies then we need to use dependency exclusion concept like below org.springframework spring-context 6.1.11 org.springframework spring-aop =========================== Maven Dependency Scope =========================== => Depenendency scope will decide when maven should load that dependency into our application. compile ----> default scope runtime test provided system import ====================== Maven Repositories ====================== => Mvn Repository is a location where maven dependencies/libraries will be stored. => Maven tool will deal with 3 types of repositories 1) central repository (public) 2) remote repository ( private -> company specific (nexus/jfrog) ) 4) local repository (in our machine -> .m2) => Local Repository will be available in our machine Path : C://Users//.m2 => Central Repository will be maintained by Apache org. It is public repository. => Remote Repositories are called as private repositories. These are project/company specific. Note: In companies we will use Nexus or JFrog tools to setup remote Repositories. => When we add dependency in pom.xml file, maven will search for it in local repo. If not available then it will search in central repo (it will download from central to local). Note: We need to modify maven settings.xml file to connect with remote repository. ========= Summary ========= 1) What is Maven 2) What is Build Process 3) Maven Setup 4) Maven Terminology 5) Maven Project Creation 6) Maven Goals Execution 7) Maven Dependencies 8) Dependency Exclusion 9) Maven Dependency Scopes 10) Maven Repositories #### Gradle Tutorial :: https://www.youtube.com/watch?v=I84f9Q5bFBA