Posts Tagged ‘maven-assembly-plugin’
Tutorial: Re-package Mule ESB as a standalone client
Case
You have to deliver Mule 2.2.1 as a standalone application, or, more accurately, as a simple archive ready-to-use by someone else (customer, co-team worker, etc.).
In this tutorial, we assume that:
- you have to include external jars, eg. MQ and WebLogic jars
- you have written your XML configuration file for Mule, of which all properties are externalized in an external property file. We don’t mind the actual workflow, we assume you’re skilled enough with Mule 😉
Build
Prerequisites
Prior to building standalone:
- get Mule ESB 2.2.1 standalone archive, available on MuleSoft website
- get the JARs needed by MQ
providerutil.jar
fscontext.jar
dhbcore.jar
connector.jar
commonservices.jar
com.ibm.mqjms.jar
com.ibm.mq.jar
- get WebLogic’s
wlfullclient.jar
- install the zip and the jars on your local repository:
mvn install:install-file -DgroupId=org.mulesource -DartifactId=mule-esb -Dversion=2.2.1 -Dpackaging=zip -Dfile=mule-standalone-2.2.1.zip mvn install:install-file -Dfile=wlfullclient.jar -DgroupId=weblogic -DartifactId=wlfullclient -Dversion=10.3 -Dpackaging=jar -DgeneratePom=true mvn install:install-file -Dfile=fscontext.jar -DgroupId=fscontext -DartifactId=fscontext -Dversion=1.2 -Dpackaging=jar -DgeneratePom=true mvn install:install-file -Dfile=providerutil.jar -DgroupId=fscontext -DartifactId=providerutil -Dversion=1.2 -Dpackaging=jar -DgeneratePom=true mvn install:install-file -DgroupId=mq -DartifactId=com.ibm.mq -Dversion=6.0.2.0 -Dpackaging=jar -Dfile=com.ibm.mq.jar mvn install:install-file -DgroupId=mq -DartifactId=com.ibm.mqjms -Dversion=6.0.2.0 -Dpackaging=jar -Dfile=com.ibm.mqjms.jar mvn install:install-file -DgroupId=mq -DartifactId=dhbcore -Dversion=6.0.2.0 -Dpackaging=jar -Dfile=dhbcore.jar mvn install:install-file -DgroupId=mq -DartifactId=commonservices -Dversion=6.0.2.0 -Dpackaging=jar -Dfile=commonservices.jar mvn install:install-file -DgroupId=connector -DartifactId=connector -Dversion=1.0 -Dpackaging=jar -Dfile=connector.jar
Files to be edited
- Create a
mule-jonathan.xml
file insrc/main/resources/
folder. - Externalize all properties in
mule-jonathan.properties
file insrc/main/resources/
folder. As you may anticipate it, you will have add this property file in Mule classpath - To perform that:
- Copy the wrapper.conf of Mule standalone archive as
src/main/resources/wrapper.conf
- After the line:
wrapper.java.classpath.3=%MULE_HOME%/lib/boot/*.jar
, add the line:
wrapper.java.classpath.4=%MULE_HOME%/etc
- Copy the wrapper.conf of Mule standalone archive as
- in
src/main/resources/
, create a filestart-mule-jonathan.bat
, with the content:set MULE_HOME=%CD% cd %MULE_HOME%\bin mule.bat -config mule-jonathan.xml
Maven
Here is the pom.xml of our project:
<?xml version="1.0"?> <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"> <parent> <groupId>lalou-jonathan</groupId> <artifactId>jonathan-parent</artifactId> <version>1.0</version></parent> <modelVersion>4.0.0</modelVersion> <groupId>lalou.jonathan</groupId> <artifactId>jonathan-lalou-standalone-esb</artifactId> <packaging>jar</packaging> <version>${jonathan.version}</version> <name>jonathan-lalou-standalone-esb</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>org.mulesource</groupId> <artifactId>mule-esb</artifactId> <version>2.2.1</version> <type>zip</type></dependency> <dependency> <groupId>weblogic</groupId> <artifactId>wlfullclient</artifactId> <version>10.3</version></dependency> <dependency> <groupId>fscontext</groupId> <artifactId>fscontext</artifactId> <version>1.2</version></dependency> <dependency> <groupId>fscontext</groupId> <artifactId>providerutil</artifactId> <version>1.2</version></dependency> <dependency> <groupId>mq</groupId> <artifactId>com.ibm.mq</artifactId> <version>6.0.2.0</version></dependency> <dependency> <groupId>mq</groupId> <artifactId>com.ibm.mqjms</artifactId> <version>6.0.2.0</version></dependency> <dependency> <groupId>mq</groupId> <artifactId>commonservices</artifactId> <version>6.0.2.0</version></dependency> <dependency> <groupId>mq</groupId> <artifactId>dhbcore</artifactId> <version>6.0.2.0</version></dependency> <dependency> <groupId>connector</groupId> <artifactId>connector</artifactId> <version>1.0</version></dependency></dependencies> <build> <resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>**/*</exclude></excludes></resource></resources> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.2-beta-2</version> <configuration> <descriptors> <descriptor>src/main/assembly/assembly.xml</descriptor></descriptors></configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
Maven Assembly
We will use Maven Assembly: this plugin allows unpack archives, copy files, insert files, delete folders, etc.
Here is the assembly.xml file that should be located in src/main/assembly/
folder of your project. The code is commented so that you understand what we do.
<assembly xmlns="http://maven.apache.org/xsd/1.1.0/assembly" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/xsd/assembly-1.1.2.xsd http://maven.apache.org/xsd/1.1.2/assembly"> <id/> <baseDirectory>jonathan-lalou-standalone-esb-${version}</baseDirectory> <formats> <format>zip</format></formats> <includeBaseDirectory>false</includeBaseDirectory> <dependencySets> <dependencySet> <outputDirectory>/</outputDirectory> <includes> <include>org.mulesource:mule-esb</include></includes> <unpack>true</unpack> <unpackOptions> <excludes> <!-- excluse original wrapper.conf, to include our tuned wrapper.conf--> <exclude>**/conf/wrapper.conf</exclude> <!--remove the these folders, useless in a standalone client--> <exclude>**/examples/**</exclude> <exclude>**/docs/**</exclude> <exclude>**/src/**</exclude></excludes></unpackOptions></dependencySet> <dependencySet> <outputDirectory>mule-standalone-2.2.1/lib/user</outputDirectory> <excludes> <exclude>org.mulesource:mule-esb</exclude></excludes></dependencySet></dependencySets> <fileSets> <fileSet> <directory>${basedir}/src/main/resources</directory> <outputDirectory>/mule-standalone-2.2.1/etc</outputDirectory> <includes> <!--include the property file --> <include>**/*jonathan*.properties</include></includes></fileSet> <fileSet> <directory>${basedir}/src/main/resources</directory> <outputDirectory>/mule-standalone-2.2.1/bin</outputDirectory> <includes> <!-- include Mule XML config file--> <include>**/*jonathan*.xml</include></includes></fileSet> <fileSet> <directory>${basedir}/src/main/resources</directory> <outputDirectory>/mule-standalone-2.2.1/conf</outputDirectory> <includes> <!-- modified wrapper.conf to stake in account the etc/ folder, containing the property file--> <include>**/wrapper.conf</include></includes></fileSet> <fileSet> <directory>${basedir}/src/main/resources</directory> <outputDirectory>/mule-standalone-2.2.1/</outputDirectory> <includes> <include>**/*-mule-jonathan.bat</include> </includes> </fileSet> </fileSets> </assembly>
Build process
To build go to the folder yourproject/jonathan
, then launch a mvn clean install
. A complete installation package is output on target
folder: jonathan-lalou-standalone-esb-1.0.zip
.
The archive is built thanks to Maven Assembly plugin.
Install
Install
Copy or move the archive jonathan-lalou-standalone-esb-1.0.zip
to any folder of your choice. Then unzip it.
(optionnal) Checks
Tree
Here is a tree of the installation, with some important file that must appear:
+---start-mule-jonathan.bat +---bin ¦ +---mule-jonathan.xml +---conf ¦ +---wrapper.conf +---etc ¦ +---mule-jonathan.properties +---lib ¦ +---boot ¦ ¦ +---exec ¦ +---endorsed ¦ +---mule ¦ +---opt ¦ +---user ¦ +------com.ibm.mq-6.0.2.0.jar ¦ +------com.ibm.mqjms-6.0.2.0.jar ¦ +------commonservices-6.0.2.0.jar ¦ +------connector-1.0.jar ¦ +------dhbcore-6.0.2.0.jar ¦ +------fscontext-1.2.jar ¦ +------providerutil-1.2.jar ¦ +------wlfullclient-10.3.jar ¦ +------connector-1.0.jar +---licenses +---logs
Files
Check the files listed above in the tree appear. Besides, check the conf/wrapper.conf
file contains the line wrapper.java.classpath.4=%MULE_HOME%/etc
Config
Edit etc/mule-jonathan.properties
file and set the right properties.
Use
Execute start-mule-jonathan.bat
to launch Mule on Windows. On first attempt, Mule will display the user licence and ask you your confirmation you accept the terms of the agreement.