# 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: ```xml <build> <plugins> <plugin> <groupId>org.apache.activemq</groupId> <artifactId>artemis-maven-plugin</artifactId> ``` ## 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: ```xml <executions> <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: ```xml <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: ```xml <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. ```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> <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> ```