Many of my friends were facing similar kind of problem while configuring the maven, so thought to cover this topic in simple form
Disclaimer : Please consider this as a quick start guide, its not the in details one, and I tried to cover the same topic in different way.
How I look at Maven?
Maven is the tool which helps me to download/manage all required API for my project.
In old days, if you need to build a simple application which handles the MS Office files (excel, word), you have to search for the API, then on the API home page you need to go to the page which details out the all required jars to use that API, and yes few of API provider also has a ZIP file which contents all the dependent jar files, if there is any other jar dependency you need to download it from their site, and many of time you will face compilation or runtime issues as some of the jar is missing or its version is not compatible.
To fix this Maven and other build tools came into the picture, where you tell the tool the details of the repository, and the API you want to use. API provider add the details of the dependencies to use their API.
Repository : Its the server which stores the all required jar files, one of them is NEXUS, which stores the required files with their binary, source and versions. Nexus provides facility to add, publish new dependencies or jar files or any dependent files which will be used by projects. You can publish your jar files on this server so that it can be reused in other applications.
POM file : POM files has the details of the dependencies to run/use API or project. This file can also has details about project, jvm version, team members etc. POM also has the Plugins configurations, there are multiple plugins available to build, report, measure code quality, analyse dependencies and deploy.
Configuration and Getting the dependencies
Settings.xml : This file holds the configurations which is common for all Maven projects, like proxy details, repository server details, authentication details. So when you run the mvn command to build the project, maven search for the settings file in Maven Folder/conf/ and <user dir>/.m2/, If both files exists, their contents gets merged, with the user-specific settings.xml being dominant.
Now maven know how to connect to server/internet (if required) and download the required dependencies, plugins etc.
POM.xml : In this file one can add the dependency details which looks like as
<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> <version>7.0.42</version> <scope>runtime</scope> </dependency>
GroupId, ArtifactID and version identifies the dependency uniquely, and based on these details required file is get downloaded to .m2 directory which is your local repository, and from where the file is referred in your project.
What is SCOPE in dependency tag?
Most of the time I fund the people face problems as they havent tried to understand what this scope is for.
compile – this is the default scope, used if none is specified. Compile dependencies are available in all classpaths. Furthermore, those dependencies are propagated to dependent projects.
provided – this is much like compile, but indicates you expect the JDK or a container to provide it at runtime. It is only available on the compilation and test classpath, and is not transitive.
runtime – this scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath.
test – this scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases.
system – this scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository.
So based on your scope, jar or package files are referred in build process. e.g. provided and test scoped dependencies wont be added to your WAR file.
for more deatils : http://maven.apache.org/pom.html
You can exclude few of the dependencies which you wont needs to be downloaded/included from the child dependencies.
mvn clean install
is used to add the classpath variable M2_REPO to Eclipse which points to your local repository and optional to configure other workspace features.
generates the Eclipse configuration files.
is used to delete the files used by the Eclipse IDE.
Few more commands
mvn dependency:tree -Dverbose -Dincludes=commons-collections
mvn dependency:analyze-only verify
Quick Start Guide: http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html