Since Artemis 1.1.0 Artemis provides the possibility of using Maven Plugins to manage the life cycle of servers.
1. When to use it
These Maven plugins were initially created to manage server instances across our examples. They can create a server, start, and do any CLI operation over servers.
You could for example use these maven plugins on your testsuite or deployment automation.
2. Goals
There are three goals that you can use
- create
-
This will create a server accordingly to your arguments. You can do some extra tricks here such as installing extra libraries for external modules.
- cli
-
This will perform any CLI operation. This is basically a maven expression of the CLI classes
- runClient
-
This is a simple wrapper around classes implementing a static main call. Notice that this won’t spawn a new VM or new Thread.
3. Declaration
On your pom, use the plugins section:
<build>
<plugins>
<plugin>
<groupId>org.apache.activemq</groupId>
<artifactId>artemis-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
4. create goal
I won’t detail every operation of the create plugin here, but I will try to describe the main parameters:
Name | Description |
---|---|
configuration |
A place that will hold any file to replace on the configuration. For instance if you are providing your own broker.xml. Default is "${basedir}/target/classes/activemq/server0" |
home |
The location where you downloaded and installed artemis. Default is "${activemq.basedir}" |
alternateHome |
This is used case you have two possible locations for your home (e.g. one under compile and one under production |
instance |
Where the server is going to be installed. Default is "${basedir}/target/server0" |
liblist[] |
A list of libraries to be installed under ./lib. ex: "org.jgroups:jgroups:3.6.0.Final" |
Example:
<execution>
<id>create</id>
<goals>
<goal>create</goal>
</goals>
<configuration>
<ignore>${noServer}</ignore>
</configuration>
</execution>
5. cli goal
Some properties for the CLI
Name | Description |
---|---|
configuration |
A place that will hold any file to replace on the configuration. For instance if you are providing your own broker.xml. Default is "${basedir}/target/classes/activemq/server0" |
home |
The location where you downloaded and installed artemis. Default is "${activemq.basedir}" |
alternateHome |
This is used case you have two possible locations for your home (e.g. one under compile and one under production |
instance |
Where the server is going to be installed. Default is "${basedir}/target/server0" |
Similarly to the create plugin, the artemis exampels are using the cli plugin. Look at them for concrete examples.
Example:
<execution>
<id>start</id>
<goals>
<goal>cli</goal>
</goals>
<configuration>
<spawn>true</spawn>
<ignore>${noServer}</ignore>
<testURI>tcp://localhost:61616</testURI>
<args>
<param>run</param>
</args>
</configuration>
</execution>
5.1. runClient goal
This is a simple solution for running classes implementing the main method.
Name | Description |
---|---|
clientClass |
A class implement a static void main(String arg[]) |
args |
A string array of arguments passed to the method |
Example:
<execution>
<id>runClient</id>
<goals>
<goal>runClient</goal>
</goals>
<configuration>
<clientClass>org.apache.activemq.artemis.jms.example.QueueExample</clientClass>
</configuration>
</execution>
5.2. Complete example
The following example is a copy of the /examples/features/standard/queue example. You may refer to it directly under the examples directory tree.
<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>
<parent>
<groupId>org.apache.activemq.examples.broker</groupId>
<artifactId>jms-examples</artifactId>
<version>1.1.0</version>
</parent>
<artifactId>queue</artifactId>
<packaging>jar</packaging>
<name>ActiveMQ Artemis JMS Queue Example</name>
<properties>
<activemq.basedir>${project.basedir}/../../../..</activemq.basedir>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>artemis-jms-client</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.activemq</groupId>
<artifactId>artemis-maven-plugin</artifactId>
<executions>
<execution>
<id>create</id>
<goals>
<goal>create</goal>
</goals>
<configuration>
<ignore>${noServer}</ignore>
</configuration>
</execution>
<execution>
<id>start</id>
<goals>
<goal>cli</goal>
</goals>
<configuration>
<spawn>true</spawn>
<ignore>${noServer}</ignore>
<testURI>tcp://localhost:61616</testURI>
<args>
<param>run</param>
</args>
</configuration>
</execution>
<execution>
<id>runClient</id>
<goals>
<goal>runClient</goal>
</goals>
<configuration>
<clientClass>org.apache.activemq.artemis.jms.example.QueueExample</clientClass>
</configuration>
</execution>
<execution>
<id>stop</id>
<goals>
<goal>stop</goal>
</goals>
<configuration>
<ignore>${noServer}</ignore>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.activemq.examples.broker</groupId>
<artifactId>queue</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>