<?xml version='1.0'?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<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.clustered</groupId>
      <artifactId>broker-features</artifactId>
      <version>2.27.0</version>
   </parent>

   <groupId>org.apache.activemq.examples.broker</groupId>
   <artifactId>jms-examples</artifactId>
   <packaging>pom</packaging>
   <name>ActiveMQ Artemis Standard Examples</name>

   <properties>
      <udp-address>231.7.7.7</udp-address>
      <activemq.basedir>${project.basedir}/../../..</activemq.basedir>
   </properties>

   <profiles>
      <profile>
         <id>release</id>
         <modules>
            <module>auto-closeable</module>
            <module>browser</module>
            <module>broker-msg-auth-plugin</module>
            <module>broker-plugin</module>
            <module>camel</module>
            <module>cdi</module>
            <module>client-kickoff</module>
            <module>completion-listener</module>
            <module>consumer-rate-limit</module>
            <module>context</module>
            <module>core-bridge</module>
            <module>database</module>
            <module>dead-letter</module>
            <module>delayed-redelivery</module>
            <module>divert</module>
            <module>durable-subscription</module>
            <module>embedded</module>
            <module>embedded-simple</module>
            <module>exclusive-queue</module>
            <module>expiry</module>
            <module>http-transport</module>
            <module>interceptor</module>
            <module>interceptor-client</module>
            <module>interceptor-mqtt</module>
            <module>interceptor-amqp</module>
            <module>instantiate-connection-factory</module>
            <module>jms-bridge</module>
            <module>jmx</module>
            <module>jmx-ssl</module>
            <module>large-message</module>
            <module>last-value-queue</module>
            <module>management</module>
            <module>management-notifications</module>
            <module>message-counters</module>
            <module>message-group</module>
            <module>message-group2</module>
            <module>message-priority</module>
            <module>netty-openssl</module>
            <module>no-consumer-buffering</module>
            <module>opentelemetry</module>
            <module>paging</module>
            <module>pre-acknowledge</module>
            <module>producer-rate-limit</module>
            <module>queue</module>
            <module>queue-jakarta</module>
            <module>queue-requestor</module>
            <module>queue-selector</module>
            <module>reattach-node</module>
            <module>request-reply</module>
            <module>scheduled-message</module>
            <module>security</module>
            <module>security-keycloak</module>
            <module>security-ldap</module>
            <module>security-manager</module>
            <module>send-acknowledgements</module>
            <module>shared-consumer</module>
            <module>slow-consumer</module>
            <module>spring-integration</module>
            <module>spring-boot-integration</module>
            <module>ssl-enabled</module>
            <module>ssl-enabled-crl-mqtt</module>
            <module>ssl-enabled-dual-authentication</module>
            <module>static-selector</module>
            <module>temp-queue</module>
            <module>topic</module>
            <module>topic-hierarchies</module>
            <module>topic-selector1</module>
            <module>topic-selector2</module>
            <module>transactional</module>
            <module>xa-heuristic</module>
            <module>xa-receive</module>
            <module>xa-send</module>
         </modules>
      </profile>
      <profile>
         <id>examples</id>
         <modules>
            <module>auto-closeable</module>
            <module>browser</module>
            <module>broker-plugin</module>
            <module>camel</module>
            <module>cdi</module>
            <module>client-kickoff</module>
            <module>completion-listener</module>
            <module>consumer-rate-limit</module>
            <module>context</module>
            <module>core-bridge</module>
            <module>database</module>
            <module>dead-letter</module>
            <module>delayed-redelivery</module>
            <module>divert</module>
            <module>durable-subscription</module>
            <module>embedded</module>
            <module>embedded-simple</module>
            <module>exclusive-queue</module>
            <module>expiry</module>
            <module>http-transport</module>
            <module>interceptor</module>
            <module>interceptor-client</module>
            <module>interceptor-mqtt</module>
            <module>interceptor-amqp</module>
            <module>instantiate-connection-factory</module>
            <module>jms-bridge</module>
            <module>jmx</module>
            <module>jmx-ssl</module>
            <module>large-message</module>
            <module>last-value-queue</module>
            <module>management</module>
            <module>management-notifications</module>
            <module>message-counters</module>
            <module>message-group</module>
            <module>message-group2</module>
            <module>message-priority</module>
            <module>netty-openssl</module>
            <module>no-consumer-buffering</module>
            <module>opentelemetry</module>
            <module>paging</module>
            <module>pre-acknowledge</module>
            <module>producer-rate-limit</module>
            <module>queue</module>
            <module>queue-jakarta</module>
            <module>queue-requestor</module>
            <module>queue-selector</module>
            <module>reattach-node</module>
            <module>request-reply</module>
            <module>scheduled-message</module>
            <module>security</module>
            <module>security-ldap</module>
            <module>security-manager</module>
            <module>send-acknowledgements</module>
            <module>shared-consumer</module>
            <module>slow-consumer</module>
            <module>spring-integration</module>
            <module>spring-boot-integration</module>
            <module>ssl-enabled</module>
            <module>ssl-enabled-crl-mqtt</module>
            <module>ssl-enabled-dual-authentication</module>
            <module>static-selector</module>

            <!--this needs to be run standalone as it needs manual intervention-->
            <!--<module>stop-server-failover</module>-->

            <module>temp-queue</module>
            <module>topic</module>
            <module>topic-hierarchies</module>
            <module>topic-selector1</module>
            <module>topic-selector2</module>
            <module>transactional</module>
            <module>xa-heuristic</module>
            <module>xa-receive</module>
            <module>xa-send</module>
         </modules>
      </profile>

   </profiles>


</project>
