I am trying to figure out the use of Maven and I got many articles describing its features and uses. But I am just not able to understand the actual use of Maven from productivity standpoint.
From what I am used to in our school projects was just create a new Java project in Eclipse, write your Code, create a .war (if web-based) and paste the code to the webapps folder of Tomcat and start the server!
So,
Where does Maven come into picture? I have used Ant and I understand Ants benefit of a standardized build process. But why do we need an advanced Ant in form of Maven?
In any case, I need to use it, so where do I get started - basic flow, some good tutorials?
Thanks
Free books about Maven can be downloaded from Sonatype (where the original developers of Maven come from).
Also see the documentation on the Apache Maven website.
Maven is used to manage the build, testing, and deployment processes. It can separate the unit tests and integration tests so you only run them when necessary and cut down on build time.
It is also a dependency manager, which means when you realize the server piece of your project needs
apache commons-logging 1.0.4
but the client conflicts with anything past0.7.9
, you can just add a couple lines to the respectivepom.xml
files, and Maven handles all of that (downloading, installing, and keeping track of the different versions of those dependencies).I was not a believer before my current task, but after 2 years using it for large enterprise applications, I definitely respect what Maven brings to the table. There are a lot of online resources but if you are going to be the lead on this and really feel uncomfortable, I recommend getting a book -- the O'Reilly one is helpful.
Forgot to mention that there is an Eclipse plugin which makes it almost painless to use with Eclipse: m2Eclipse.
Second update for example
pom.xml
segment to answer OP question:Your
pom.xml
will contain XML code such as:These are downloaded from the central Maven repository (google "maven nexus") or you can configure your own additional repositories (like for your own projects, or if you are not Internet-connected).
I had exactly the same perception as you and for years I avoided Maven.
The thing is, it allows you to easily get the required jars your application may need( called dependencies - jars and other things - ) . So the next time somebody else run your project he will get the jars automatically.
I know that's a bit hard to grasp, until you work with an existing projects using it.
For instance I downloaded an open source project recently, which depended on 10 or 12 different on different jar versions. After downloading the source code and executing Maven, all those jars ( and a lot more others ) were downloaded for me.
The problem with Maven ( as a friend of mine told me ) is that to perform a "Hello world" program, it first downloads the world to greet him. :P
for all those wondering where the maven downloads the dependency jars, check out a folder named .m2 in the user root directory. eg. for me it is the c:\documentsand settings\myUserName.m2\
also i have researched a bit on maven and i have made some small scribbling like reminders. If it is worth a read then here it is ::
/* mvn generate mvn install downloads all necessary jars mvn test tests the application made... mvn site builds the site downloading dependencies
to deploy the site, we need to declare a location to distribute to in your pom.xml, similar to the repository for deployment. ... website scp://www.mycompany.com/www/docs/project/ ...
mvn site-deploy deploys the site
how to build structure of site : The site.xml file is used to describe the layout of the site, and replaces the navigation.xml file used in Maven
A sample is given below:
Maven http://maven.apache.org/images/apache-maven-project.png http://maven.apache.org/ http://maven.apache.org/images/maven-small.gif
so in effect, we need to link our html to this structure format to make the website layout also in order for us to add any new css or such stuff, all we need to do is to put them into the resources part of the src folder
then we can create a war file of our project and lay it out in the httpd folder of apache or such similar folder ofour web server
In case we need to generate projects, we need to add a few lines of code to our pom.xml file and that is: ... org.apache.maven.plugins maven-project-info-reports-plugin 2.0.1 ...
also, site descriptors are to be set in site.xml
the details can be seen in the documentation of maven
maven structure with their importance:
project/ pom.xml - Defines the project src/ main/ java/ - Contains all java code that will go in your final artifact.
See maven-compiler-plugin for details scala/ - Contains all scala code that will go in your final artifact. ////not needed for our current project as of yet See maven-scala-plugin for details resources/ - Contains all static files that should be available on the classpath in the final artifact. See maven-resources-plugin for details webapp/ - Contains all content for a web application (jsps, css, images, etc.)
See maven-war-plugin for details site/ - Contains all apt or xdoc files used to create a project website.
See maven-site-plugin for details
test/ java/ - Contains all java code used for testing.
See maven-compiler-plugin for details scala/ - Contains all scala code used for testing.
See maven-scala-plugin for details resources/ - Contains all static content that should be available on the classpath during testing. See maven-resources-plugin for details
mvn validate this will validate that all the dependencies are satisfied and nothing is missing mvn compile this will compile the project mvn verify checks whether the package is valid or not also in the project, the dependencies are to be inserted into the xml file
the example of dependencies injection is given below:: org.scala-lang scala-library 2.7.2-rc2 junit junit 3.8.1 test
Each dependency consists of several items:
You can integrate your static pages by following these steps:
mvn tomcat:deploy to deploy to tomcat or apache, you can go for this command
helpful.
The latest netbeans also has a pretty good maven integration.