activemq-artemis/docs/user-manual/en/maven-plugin.md

6.6 KiB

Maven Plugins

Since Artemis 1.1.0 Artemis provides the possibility of using Maven Plugins to manage the life cycle of servers.

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.

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.

Declaration

On your pom, use the plugins section:

<build>
   <plugins>
      <plugin>
         <groupId>org.apache.activemq</groupId>
         <artifactId>artemis-maven-plugin</artifactId>
      </plugin>
   </plugins>
</build>

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>

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>

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>

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>cli</goal>
                  </goals>
                  <configuration>
                     <ignore>${noServer}</ignore>
                     <args>
                        <param>stop</param>
                     </args>
                  </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>