= Apache Maven =
Maven is a software project management and comprehension tool.
Based on the concept of a Project Object Model (POM), Maven can
manage a project's build, reporting and documentation from a
central piece of information.

Requires Java.

== Slackbuild ==
 * su
 * cd /tmp
 * wget http://slackbuilds.org/slackbuilds/14.0/development/apache-maven.tar.gz
 * tar xvzf apache-maven.tar.gz
 * cd apache-maven
 * wget http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.4-bin.tar.gz
 * ./apache-maven.SlackBuild 
 * installpkg /tmp/apache-maven-3.0.4-noarch-1_SBo.tgz 

Package:  [[attachment:apache-maven-3.0.4-noarch-1_SBo.tgz]]

== User settings ==
You can specify your user configuration in ${user.home}/.m2/settings.xml.
The default location of your local repository is ${user.home}/.m2/repository/.

== Maven sample web app for JBoss AS 7.1.1 ==

=== Web application creation ===
 * cd ~
 * mvn archetype:generate -DgroupId=org.allowed.bitarus -DartifactId=WebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
 * cd WebApp
 * mvn clean
 * mvn compile
 * mvn package

=== Deploy web application on jboss AS 7.1.1 ===
 * /opt/jboss-as-7.1.1.Final/bin/standalone.sh 
 * http://localhost:9990
 * admin 12345678
 * Manage deployments
 * Add content
 * Choose file ~/WebApp/target/WebApp.war
 * next, save
 * enable , confirm
 * http://localhost:8080/WebApp/


=== Add REST and servlet support ===
 * url http://localhost:8080/WebApp/rest/testSvc/paramx

Add dependencies to pom.xml, jboss AS 7.1.1 JAX-RS
{{{#!highlight xml
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
    <version>2.2.1.GA</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>
}}}

In JBoss 5.1.0 comment the scope provided for resteasy, to add to WEB-INF folder the required libraries for resteasy.

=== Create source code for REST service and servlet ===
File src/main/java/org/allowed/bitarus/TestService.java

URL http://localhost:8080/WebApp/rest/testSvc/asddddd

{{{#!highlight java
package org.allowed.bitarus;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

@Path("/testSvc")
public class TestService {

    @GET
    @Path("/{param}")
    public Response getMsg(@PathParam("param") String msg) {
        String out = String.format("testSvc returns %s", msg);
        return Response.status(200).entity(out).build();
    }

}

}}}

File src/main/java/org/allowed/bitarus/Servletx.java 

http://localhost:8080/WebApp/servletxxx

{{{#!highlight java
package org.allowed.bitarus;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class Servletx extends HttpServlet{
    public void service(HttpServletRequest req, HttpServletResponse res) throws IOException
    {
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
        out.println("<html><head><title>Hello World!</title></head>");
        out.println("<body><h1>Hello World!</h1></body></html>");
    }
}
}}}

=== Configure web app ===
File src/main/webapp/WEB-INF/web.xml 

{{{#!highlight xml
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
  </context-param>
 
  <context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/rest</param-value>
  </context-param>

  <servlet>
    <servlet-name>resteasy-servlet</servlet-name>
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>resteasy-servlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>Servletx</servlet-name>
    <servlet-class>org.allowed.bitarus.Servletx</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Servletx</servlet-name>
    <url-pattern>/servletxxx</url-pattern> 
  </servlet-mapping>
</web-app>

}}}

== Dependencies scopes on pom.xml ==
=== compile ===
compile is the default scope; all dependencies are compile-scoped if a scope is not supplied. compile dependencies are available in all classpaths, and '''they are packaged'''.
=== provided ===
provided dependencies are used when you expect the '''JDK or a container to provide them'''.

== Eclipse plugin ==
=== Install on Eclipse 3.8.2 ===
 * Choose Help menu
 * Install new software
 * Name: M2Eclipse
 * Location: http://download.eclipse.org/technology/m2e/releases
 * Maven Integration For Eclipse
 * Select all
 * next
 * next 
 * I accept
 * Finish

=== Import existing project ===
 * Java perspective
 * Import
 * Maven
 * Existing Maven project
 * next
 * root folder
 * next
 * finish

== Maven sample enterprise app ==
 * cd /tmp
 * mvn archetype:generate -DgroupId=org.allowed.bitarus -DartifactId=EnterpriseApp -DarchetypeArtifactId=org.jboss.spec.archetypes.jboss-javaee6-ear-webapp -DinteractiveMode=false
 * cd EnterpriseApp/
 * Edit pom.xml and comment site module
 * mvn clean
 * mvn compile
 * mvn package #  /tmp/EnterpriseApp/EnterpriseApp-ear/target/EnterpriseApp.ear
 * Deploy the EnterpriseApp.ear with http://localhost:9990
 * Open http://localhost:8080/EnterpriseApp/index.jsf