MoinMoin Logo
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Navigation

  • Start
  • Sitemap
Revision 37 as of 2015-01-23 19:52:42
  • Java
  • ApacheMaven

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: 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

Sample WebApp file with source code to use MySQL data source:WebApp.zip

Sample WebAppJersey2, with dependencies for Jersey2 and JSON, to be deployed on Tomcat 7:WebAppJersey2.zip

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

   1 <dependency>
   2     <groupId>org.jboss.resteasy</groupId>
   3     <artifactId>resteasy-jaxrs</artifactId>
   4     <version>2.2.1.GA</version>
   5     <scope>provided</scope>
   6 </dependency>
   7 <dependency>
   8     <groupId>javax</groupId>
   9     <artifactId>javaee-web-api</artifactId>
  10     <version>6.0</version>
  11     <scope>provided</scope>
  12 </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

   1 package org.allowed.bitarus;
   2 
   3 import javax.ws.rs.GET;
   4 import javax.ws.rs.Path;
   5 import javax.ws.rs.PathParam;
   6 import javax.ws.rs.core.Response;
   7 
   8 @Path("/testSvc")
   9 public class TestService {
  10 
  11     @GET
  12     @Path("/{param}")
  13     public Response getMsg(@PathParam("param") String msg) {
  14         String out = String.format("testSvc returns %s", msg);
  15         return Response.status(200).entity(out).build();
  16     }
  17 
  18 }

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

http://localhost:8080/WebApp/servletxxx

   1 // File src/main/java/org/allowed/bitarus/Servletx.java 
   2 // References EJB in JBoss5. Test to see EJB invocation from Tomcat
   3 package org.allowed.bitarus;
   4 
   5 import javax.servlet.*;
   6 import javax.servlet.http.*;
   7 import java.io.*;
   8 
   9 import java.security.Security;
  10 import java.util.Properties;
  11 import javax.naming.Context;
  12 import javax.naming.InitialContext;
  13 import org.allowed.bitarus.IWSTest;
  14 
  15 public class Servletx extends HttpServlet{
  16     public void service(HttpServletRequest req, HttpServletResponse res) throws IOException
  17     {
  18         res.setContentType("text/html");
  19         PrintWriter out = res.getWriter();
  20         String text="";
  21         try{
  22           Properties env = new Properties();
  23           env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
  24           env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
  25           env.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099");
  26           InitialContext context = new InitialContext(env);
  27           IWSTest test = (IWSTest) context.lookup("WSTest/remote");
  28           text=test.helloWorld();
  29         }
  30         catch(Exception ex){
  31         }
  32         out.println("<html><head><title>Hello World!</title></head>");
  33         out.println(String.format("<body><h1>Hello World! %s </h1></body></html>",text));
  34     }
  35 }

Dependency for JAR that has IWSTest interface that WSTest EJB implements:

   1    <dependency>
   2       <groupId>org.allowed.bitarus</groupId>
   3       <artifactId>test2</artifactId>
   4       <version>0.0.1</version>
   5     </dependency>

Configure web app

File src/main/webapp/WEB-INF/web.xml

   1 <web-app>
   2   <display-name>Archetype Created Web Application</display-name>
   3   <context-param>
   4     <param-name>resteasy.scan</param-name>
   5     <param-value>true</param-value>
   6   </context-param>
   7  
   8   <context-param>
   9     <param-name>resteasy.servlet.mapping.prefix</param-name>
  10     <param-value>/rest</param-value>
  11   </context-param>
  12 
  13   <servlet>
  14     <servlet-name>resteasy-servlet</servlet-name>
  15     <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
  16   </servlet>
  17   <servlet-mapping>
  18     <servlet-name>resteasy-servlet</servlet-name>
  19     <url-pattern>/rest/*</url-pattern>
  20   </servlet-mapping>
  21 
  22   <servlet>
  23     <servlet-name>Servletx</servlet-name>
  24     <servlet-class>org.allowed.bitarus.Servletx</servlet-class>
  25   </servlet>
  26   <servlet-mapping>
  27     <servlet-name>Servletx</servlet-name>
  28     <url-pattern>/servletxxx</url-pattern> 
  29   </servlet-mapping>
  30 </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

Maven sample ejb JEE5

  • cd /tmp
  • mvn archetype:generate -DgroupId=org.allowed.bitarus -DartifactId=EjbJEE5 -DarchetypeArtifactId=org.codehaus.mojo.archetypes.ejb-jee5 -DinteractiveMode=false

  • cd EnterpriseApp/
  • Edit pom.xml and comment site module
  • mvn clean
  • mvn compile
  • mvn package # /tmp/EnterpriseApp/EnterpriseApp-ear/target/EnterpriseApp.ear

POM EJB 3.0 + JAX-WS + JBoss 5.1.0

For JBoss 5.0. Source code Java below folder ejbModule. Create source folder in Eclipse named ejbModule.

pom.xml

   1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   2   <modelVersion>4.0.0</modelVersion>
   3   <groupId>org.allowed.bitarus</groupId>
   4   <artifactId>test2</artifactId>
   5   <version>0.0.1</version>
   6   <packaging>ejb</packaging>
   7   
   8   <build>
   9     <sourceDirectory>ejbModule</sourceDirectory>
  10     <resources>
  11       <resource>
  12         <directory>ejbModule</directory>
  13         <excludes>
  14           <exclude>**/*.java</exclude>
  15         </excludes>
  16       </resource>
  17     </resources>
  18     <plugins>
  19       <plugin>
  20         <artifactId>maven-ejb-plugin</artifactId>
  21         <version>2.3</version>
  22         <configuration>
  23           <ejbVersion>3.0</ejbVersion>
  24         </configuration>
  25       </plugin>
  26     </plugins>
  27   </build>
  28   
  29   <dependencies>
  30     <dependency>
  31         <!-- EJB 3.0 -->
  32         <groupId>javax.ejb</groupId>
  33         <artifactId>ejb-api</artifactId>
  34         <version>3.0</version>
  35     </dependency>
  36     <dependency>
  37         <!--jax ws web servies -->
  38         <groupId>sun-jaxws</groupId>
  39         <artifactId>jsr181-api</artifactId>
  40         <version>1.0</version>
  41     </dependency>
  42 
  43 <dependency>
  44         <groupId>javaee</groupId>
  45         <artifactId>javaee-api</artifactId>
  46         <version>5</version>
  47 </dependency>
  48 
  49   </dependencies>
  50 </project>

Source code files in ejbModule/org/allowed/bitarus

   1 //WSTest.java
   2 package org.allowed.bitarus;
   3 
   4 import java.sql.Connection;
   5 import java.sql.PreparedStatement;
   6 import java.sql.ResultSet;
   7 import java.sql.SQLException;
   8 import java.util.ArrayList;
   9 
  10 import javax.ejb.Stateless;
  11 import javax.jws.WebMethod;
  12 import javax.jws.WebService;
  13 import javax.naming.Context;
  14 import javax.naming.InitialContext;
  15 
  16 /**
  17  * Session Bean implementation class WSTest
  18  */
  19 @Stateless
  20 @WebService
  21 // http://localhost:8080/test2-0.0.1/WSTest?wsdl
  22 public class WSTest implements WSTestRemote, WSTestLocal {
  23         private static final String QUERY1 = "SELECT distinct table_name FROM user_tables";
  24         private static final String JNDI_DATASOURCE = "java:OracleDS";
  25         // private static final String QUERY1 = "select table_name from information_schema.tables;";
  26         // private static final String JNDI_DATASOURCE = "java:/MysqlDS";
  27 
  28         public WSTest() {
  29         }
  30 
  31         @WebMethod
  32         public String helloWorld() {
  33                 return "Hello world";
  34         }
  35 
  36         @WebMethod
  37         public String[] checkDB() {
  38                 ArrayList<String> list = new ArrayList<String>();
  39 
  40                 Connection conn = null;
  41                 PreparedStatement ps = null;
  42                 ResultSet rs = null;
  43 
  44                 try {
  45                         Context ctx = new InitialContext();
  46                         conn = ((javax.sql.DataSource) ctx.lookup(WSTest.JNDI_DATASOURCE)).getConnection();
  47                         ps = conn.prepareStatement(WSTest.QUERY1);
  48                         rs = ps.executeQuery();
  49                         while (rs.next()) {
  50                                 list.add(rs.getString(1));
  51                         }
  52                 } catch (Exception e) {
  53                         list.add(e.getMessage());
  54                 } finally {
  55                         if (rs != null) {
  56                                 try {
  57                                         rs.close();
  58                                 } catch (SQLException e) {
  59                                         e.printStackTrace();
  60                                 }
  61                         }
  62 
  63                         if (ps != null) {
  64                                 try {
  65                                         ps.close();
  66                                 } catch (SQLException e) {
  67                                         e.printStackTrace();
  68                                 }
  69                         }
  70                         if (conn != null) {
  71                                 try {
  72                                         conn.close();
  73                                 } catch (SQLException e) {
  74                                         e.printStackTrace();
  75                                 }
  76                         }
  77                 }
  78                 
  79                 String[] r = new String[list.size()];
  80                 list.toArray(r);
  81                 return r;
  82         }
  83 }

   1 //WSTestLocal.java
   2 package org.allowed.bitarus;
   3 import javax.ejb.Local;
   4 
   5 @Local
   6 public interface WSTestLocal extends IWSTest{
   7 }

   1 //WSTestRemote.java
   2 package org.allowed.bitarus;
   3 import javax.ejb.Remote;
   4 
   5 @Remote
   6 public interface WSTestRemote  extends IWSTest{
   7 }

   1 //IWSTest
   2 package org.allowed.bitarus;
   3 
   4 public interface IWSTest {
   5   public String helloWorld();
   6 }

Build EJB JAR with maven

  • mvn clean compile package

In http://localhost:8080/admin-console/ at link EJB 3.x Application (EJB JAR), add resource test2-0.0.1.jar.

In JBoss 5.1.0 copy the following libraries from the JBOSS_HOME/client directory to the JBOSS_HOME/lib/endorsed directory, so that the JAX-WS 2.0 apis supported by JBossWS are used:

  • jbossws-native-saaj.jar
  • jbossws-native-jaxrpc.jar
  • jbossws-native-jaxws.jar
  • jbossws-native-jaxws-ext.jar

Check deployed EJB with http://localhost:8080/test2-0.0.1/WSTest?wsdl

File structure:

vitor@darkstar$tree .
.
|-- ejbModule
|   `-- org
|       `-- allowed
|           `-- bitarus
|               |-- IWSTest.java
|               |-- WSTest.java
|               |-- WSTestLocal.java
|               `-- WSTestRemote.java
|-- pom.xml
`-- target
    |-- classes
    |   `-- org
    |       `-- allowed
    |           `-- bitarus
    |               |-- IWSTest.class
    |               |-- WSTest.class
    |               |-- WSTestLocal.class
    |               `-- WSTestRemote.class
    |-- maven-archiver
    |   `-- pom.properties
    |-- surefire
    `-- test2-0.0.1.jar

11 directories, 11 files

Oracle datasource for JBoss 5

Copy to <...>\jboss-5.1.0.GA\server\default\deploy\oracle-ds.xml

Copy ojdbc6.jar to <...>\jboss-5.1.0.GA\server\default\lib

   1 <?xml version="1.0" encoding="UTF-8"?>
   2 <datasources>
   3     <!-- copy ojdbc6.jar to <...>\jboss-5.1.0.GA\server\default\lib -->
   4     <local-tx-datasource>
   5         <jndi-name>OracleDS</jndi-name>
   6         <connection-url>jdbc:oracle:thin:@localhost:1521:xe</connection-url>
   7         <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
   8         <user-name>SYSTEM</user-name>
   9         <password>jboss</password>
  10         <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>
  11         <metadata>
  12             <type-mapping>Oracle9i</type-mapping>
  13         </metadata>
  14     </local-tx-datasource>
  15 </datasources>

MySQL datasource for JBoss 5

Copy to <...>\jboss-5.1.0.GA\server\default\deploy\mysql-ds.xml

Copy mysql-connector-java-5.1.30-bin.jar to <...>\jboss-5.1.0.GA\server\default\lib

   1 <?xml version="1.0" encoding="UTF-8"?>
   2 <datasources>
   3     <local-tx-datasource>
   4     <jndi-name>MysqlDS</jndi-name>
   5     <connection-url>jdbc:mysql://localhost:3306/mysql</connection-url>
   6     <driver-class>com.mysql.jdbc.Driver</driver-class>
   7     <user-name>root</user-name>
   8     <password>12345678</password>  
   9  <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name>
  10     <metadata>
  11     <type-mapping>mySQL</type-mapping>
  12     </metadata>
  13     </local-tx-datasource>
  14 </datasources>

Assembly plugin

The Assembly Plugin for Maven is primarily intended to allow users to aggregate the project output along with its dependencies, modules, site documentation, and other files into a single distributable archive.

http://maven.apache.org/plugins/maven-assembly-plugin/usage.html

<project>
  <!-- ... -->
  <build>
    <!-- ... -->
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
</project>

Standalone app

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
        http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.example</groupId>
        <artifactId>artifactX</artifactId>
        <packaging>jar</packaging>
        <version>0.0.1</version>
        <name>artifactX</name>
        <url>http://maven.apache.org</url>
        <build>
                <plugins>
                        <plugin>
                                <artifactId>maven-assembly-plugin</artifactId>
                                <version>2.4</version>
                                <configuration>
                                        <descriptorRefs>
                                                <descriptorRef>jar-with-dependencies</descriptorRef>
                                        </descriptorRefs>
                                        <archive>
                                                <manifest>
                                                        <mainClass>com.example.Main</mainClass>
                                                </manifest>
                                        </archive>
                                </configuration>
                                <executions>
                                        <execution>
                                                <id>make-assembly</id> 
                                                <phase>package</phase> 
                                                <goals>
                                                        <goal>single</goal>
                                                </goals>
                                        </execution>
                                </executions>
                        </plugin>
                </plugins>
        </build>
        <dependencies>
                <dependency>
                        <groupId>com.google.code.gson</groupId>
                        <artifactId>gson</artifactId>
                        <version>2.3</version>
                </dependency>
                <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.31</version>
                        <scope>compile</scope>
                </dependency>
                <dependency>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                        <version>1.7.7</version>
                </dependency>
                <dependency>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-simple</artifactId>
                        <version>1.7.7</version>
                </dependency>
        </dependencies>
</project>

Init script:

# chkconfig: 345 99 99
# description: Starts and stops the progx process
USER=userx
PROG=progx
PIDFILE="/tmp/progx.pid"
PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin"
LOG="/tmp/progx.log"
JAVA="/usr/java/jdk1.6.0_26/bin/java"
JARFILE="/home/userx/progx-0.0.1-jar-with-dependencies.jar"

start(){
  echo "Start called $PROG with user $USER"
  su - $USER -c "$JAVA -jar $JARFILE " &
  /bin/sleep 2
  PID=`ps uax| grep java | grep $PROG | grep $USER | awk '{print $2}'`
  echo "Program $PROG running with PID: $PID"
  echo "$PID" > $PIDFILE
}

status(){
  PID=`cat $PIDFILE`
  echo "Running $PROG with PID: $PID"
}

stop(){
  echo "Stop called for $PROG"
  PID=`cat $PIDFILE`
  echo "PID to kill $PROG  $PID"
  kill -9 $PID
  rm $PIDFILE
}

# switch
case "$1" in
  start)
    start
    ;;
  status)
    status
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "$PROG start|status|stop|restart"
    exit 1
;;
esac

Install JAR local repository

To install a JAR in the local repository use the following command:

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

mvn install:install-file -DgroupId=com.sun -DartifactId=tools -Dversion=1.4.2 -Dpackaging=jar -Dfile=“C:Program FilesJavajdk1.6.0_26libtools.jar”

Dependency:

<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.4.2</version>
</dependency>
  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01