自 Artemis 1.1.0 起,Artemis 提供了使用 Maven 插件来管理服务器生命周期的可能性。

1. 何时使用

这些 Maven 插件最初是为了管理我们示例中的服务器实例而创建的。它们可以创建服务器、启动服务器,并在服务器上执行任何 CLI 操作。

例如,您可以在测试套件或部署自动化中使用这些 maven 插件。

2. 目标

您可以使用三个目标

create

这将根据您的参数创建一个服务器。您可以在此处执行一些额外的操作,例如为外部模块安装额外的库。

cli

这将执行任何 CLI 操作。这基本上是 CLI 类的一个 Maven 表达式。

runClient

这是一个围绕实现静态 main 调用的类的简单包装。请注意,这不会生成新的 VM 或新线程。

3. 声明

在您的 pom 中,使用 plugins 部分

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

4. create 目标

我不会在这里详细说明 create 插件的每个操作,但我会尝试描述主要参数

名称 描述

configuration

一个将保存任何要在配置中替换的文件的位置。例如,如果您提供自己的 broker.xml。默认值为“${basedir}/target/classes/activemq/server0”

home

您下载和安装 artemis 的位置。默认值为“${activemq.basedir}”

alternateHome

如果您有两个可能的位置用于您的 home(例如,一个在编译下,一个在生产下)时,就会用到这个

instance

服务器将要安装的位置。默认值为“${basedir}/target/server0”

liblist[]

要在 ./lib 下安装的库列表。例如:“org.jgroups:jgroups:3.6.0.Final”

示例

<execution>
   <id>create</id>
   <goals>
      <goal>create</goal>
   </goals>
   <configuration>
      <ignore>${noServer}</ignore>
   </configuration>
</execution>

5. cli 目标

CLI 的一些属性

名称 描述

configuration

一个将保存任何要在配置中替换的文件的位置。例如,如果您提供自己的 broker.xml。默认值为“${basedir}/target/classes/activemq/server0”

home

您下载和安装 artemis 的位置。默认值为“${activemq.basedir}”

alternateHome

如果您有两个可能的位置用于您的 home(例如,一个在编译下,一个在生产下)时,就会用到这个

instance

服务器将要安装的位置。默认值为“${basedir}/target/server0”

与 create 插件类似,artemis 示例也使用 cli 插件。请查看它们以获取具体示例。

示例

<execution>
  <id>start</id>
  <goals>
     <goal>cli</goal>
  </goals>
  <configuration>
     <spawn>true</spawn>
     <ignore>${noServer}</ignore>
     <testURI>tcp://127.0.0.1:61616</testURI>
     <args>
        <param>run</param>
     </args>
  </configuration>
</execution>

5.1. runClient 目标

这是用于运行实现 main 方法的类的简单解决方案。

名称 描述

clientClass

一个实现静态 void main(String arg[]) 的类

args

传递给方法的参数的字符串数组

示例

<execution>
  <id>runClient</id>
  <goals>
     <goal>runClient</goal>
  </goals>
  <configuration>
     <clientClass>org.apache.activemq.artemis.jms.example.QueueExample</clientClass>
  </configuration>
</execution>

5.2. 完整示例

以下示例是 /examples/features/standard/queue 示例的副本。您可以在示例目录树下直接参考它。

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