Maven : My Guide

Based on my experiences and learnings


https://en.wikipedia.org/wiki/Apache_Maven
https://maven.apache.org/what-is-maven.html



https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
https://maven.apache.org/guides/getting-started/index.html


https://maven.apache.org/archetype/index.html
https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
https://maven.apache.org/plugins/index.html



https://maven.apache.org/guides/index.html

https://maven.apache.org/
https://mvnrepository.com/

https://continuousdelivery.com/
https://www.atlassian.com/continuous-delivery/ci-vs-ci-vs-cd
https://en.wikipedia.org/wiki/Comparison_of_open-source_configuration_management_software


What is Maven?

	Maven is a project development management and comprehension tool. Based on the concept of a project object model: builds, dependency management, documentation creation, site publication, and distribution publication are all controlled from the pom.xml declarative file. 

https://maven.apache.org/guides/index.html


Why Maven ? What problem does maven solve?
	- convention over configuration
	- Strucure of program
			https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
	- Build process - clean compile package install deploy site etc
	- packaging  - jar/war/pom
	- versioning  - GAVC
	- Dependency Mgmt - direct and transitive
	- project information
	- ease automation
	 


How Maven Works?

	Install and configure
	Create project and Identify deliverable and packaging GAVC
	Add Dependencies declaratively in pom.xml
	build project deafult configuration
	customize build : maven plugins and their goals with build life cycle phases
  build profiles 
	Repository: install(Local) vs deploy(Remote) artifact(deliverable)
	Documentation of project




How to use Maven? 

 Installation 
	https://maven.apache.org/guides/mini/guide-configuring-maven.html
 Configuration

	https://maven.apache.org/settings.html
	
  Can Run In/With		
      cli tools : mvn 

      Ide : eclipse and Intelli-j Idea

      CD/CI tools

	

https://maven.apache.org/general.html


Key points in Maven: 

	project Strucutre
	pom.xml
	build lifcycle and plugin goals
	dependency management
	artifact Identification
  maven profiles


Who uses maven and for what?

  Uses may changes according to Roles. 

  Developers , QA and Testers, Dev-ops,Tech Managers/Leads

	Create project
	Dependency Management
	Build and Run in various environment (dev,test,qa,prod) and tools (ide,CD/CI,CLI,Containers)
	Uses Profiles for configuration
	run unit tests and integration tests
	Run Tests 
	Generate Test Reports and Analyse

	installation and configuration of tools build tools
	CD/CI Jenkins,Bamboo,Travis,TeamCity,GoCD etc  https://code-maze.com/top-8-continuous-integration-tools/
	COnfig Mgmt Puppet,Chef,Ansible etc  
		
	
	Automate Build process - configure with CD-CI tools 

	manage Local and Remote/Central repository
	
	Product Feature and release version maintainance	
	Project Data :
	Team with members
	Source control Data
	Document generation
	Integrate Tools like sonar-qube for Code Quality and Technical Debt etc
	https://www.atlassian.com/continuous-delivery/ci-vs-ci-vs-cd


Strengths 

	Convention over configuration
	lots of plugins
	evolved and stable
	easy to use compared to use: get up running quickly
	portable , uses xml for pom
	


Weaknesses
	verbose compared to newer technology like gradle. Lengthy xml files
	Less Flexible compared to gradle, gradle itself based on scripting language Groovy
	NO DSL as available in gradle

	https://technologyconversations.com/2014/06/18/build-tools/


Alternatives to maven 

ant with ivy
graddle
https://dzone.com/articles/gradle-vs-maven
https://dzone.com/articles/maven-vs-gradle-and-the-best-of-both-worlds




Quick  and Dirty

1. 	https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html
	
  
  <project>
	      ....
              <properties>
                <maven.compiler.source>1.8</maven.compiler.source>
                <maven.compiler.target>1.8</maven.compiler.target>
              </properties>   
        ....
	</project>

2. https://maven.apache.org/plugins/maven-compiler-plugin/examples/pass-compiler-arguments.html
	
3. http://www.vogella.com/tutorials/ApacheMaven/article.html

4. https://www.jfrog.com/confluence/display/RTF/Welcome+to+Artifactory

5. http://www.vogella.com/tutorials/EclipseMaven/article.html