自 Artemis 1.1.0 起,Artemis 提供使用 Maven 插件來管理伺服器生命週期的功能。

1. 何時使用

這些 Maven 插件最初是為了管理我們範例中的伺服器實例而創建的。它們可以創建伺服器、啟動伺服器並對伺服器執行任何 CLI 操作。

例如,您可以在測試套件或部署自動化中使用這些 Maven 插件。

2. 目標 (Goals)

您可以使用三個目標

create

這將根據您的參數創建伺服器。您可以在此處執行一些額外技巧,例如為外部模組安裝額外的程式庫。

cli

這將執行任何 CLI 操作。這基本上是 CLI 類別的 Maven 表達式

runClient

這是一個簡單的封裝器,用於封裝實現靜態 main 呼叫的類別。請注意,這不會產生新的 VM 或新的執行緒。

3. 宣告 (Declaration)

在您的 pom 檔中,使用 plugins 區段

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

4. create 目標

我不會在此詳細說明 create 插件的每個操作,但我會嘗試描述主要參數

名稱 (Name) 描述 (Description)

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 的一些屬性

名稱 (Name) 描述 (Description)

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 方法的類別。

名稱 (Name) 描述 (Description)

clientClass

一個實作 static 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 範例的副本。您可以直接參考 examples 目錄樹下的範例。

<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>