<?xml version="1.0"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.8.0</version>
<packaging>jar</packaging>
<name>RabbitMQ Java Client</name>
<description>The RabbitMQ Java client library allows Java applications to interface with RabbitMQ.</description>
<url>https://www.rabbitmq.com</url>
<licenses>
<license>
<name>ASL 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0.html</url>
<distribution>repo</distribution>
</license>
<license>
<name>GPL v2</name>
<url>https://www.gnu.org/licenses/gpl-2.0.txt</url>
<distribution>repo</distribution>
</license>
<license>
<name>MPL 1.1</name>
<url>https://www.mozilla.org/MPL/MPL-1.1.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<developer>
<email>[email protected]</email>
<name>Team RabbitMQ</name>
<organization>Pivotal Software, Inc.</organization>
<organizationUrl>https://rabbitmq.com</organizationUrl>
</developer>
</developers>
<url>https://github.com/rabbitmq/rabbitmq-java-client</url>
<connection>scm:git:git://github.com/rabbitmq/rabbitmq-java-client.git</connection>
<developerConnection>scm:git:[email protected]:rabbitmq/rabbitmq-java-client.git</developerConnection>
<tag>v5.8.0</tag>
<organization>
<name>Pivotal Software, Inc.</name>
<url>https://www.rabbitmq.com</url>
</organization>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<slf4j.version>1.7.29</slf4j.version>
<metrics.version>4.1.2</metrics.version>
<micrometer.version>1.3.2</micrometer.version>
<jackson.version>2.10.1</jackson.version>
<logback.version>1.2.3</logback.version>
<junit.version>4.12</junit.version>
<awaitility.version>4.0.1</awaitility.version>
<mockito.version>3.2.0</mockito.version>
<assertj.version>3.14.0</assertj.version>
<jetty.version>9.4.24.v20191120</jetty.version>
<bouncycastle.version>1.64</bouncycastle.version>
<maven.javadoc.plugin.version>3.1.1</maven.javadoc.plugin.version>
<maven.release.plugin.version>2.5.3</maven.release.plugin.version>
<versions.maven.plugin.version>2.3</versions.maven.plugin.version>
<maven.resources.plugin.version>3.0.2</maven.resources.plugin.version>
<maven.source.plugin.version>3.0.1</maven.source.plugin.version>
<groovy.maven.plugin.version>2.0</groovy.maven.plugin.version>
<groovy.all.version>2.4.8</groovy.all.version>
<keytool.maven.plugin.version>1.5</keytool.maven.plugin.version>
<build.helper.maven-plugin.version>1.12</build.helper.maven-plugin.version>
<maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
<maven.surefire.plugin.version>2.22.2</maven.surefire.plugin.version>
<maven.failsafe.plugin.version>2.22.2</maven.failsafe.plugin.version>
<maven.gpg.plugin.version>1.6</maven.gpg.plugin.version>
<maven.jar.plugin.version>3.0.2</maven.jar.plugin.version>
<maven.bundle.plugin.version>3.2.0</maven.bundle.plugin.version>
<maven.packagecloud.wagon.version>0.0.6</maven.packagecloud.wagon.version>
<checksum.maven.plugin.version>1.8</checksum.maven.plugin.version>
These groovy scripts are used later in this POM file to generate
source files and resources for the library itself and for the
testsuite.
<groovy-scripts.dir>${basedir}/src/main/scripts</groovy-scripts.dir>
${deps.dir} should point to a directory containing a working copy of
rabbitmq-codegen and rabbitmq-server, named "rabbitmq_codegen" and
"rabbit" respectively.
"rabbitmq_codegen" is used to generate required Java source files.
Its path can be specified with the ${codegen.dir} property instead.
"rabbit" is used to automatically setup a RabbitMQ cluster for the
testsuite.
<deps.dir>${basedir}/deps</deps.dir>
<codegen.dir>${deps.dir}/rabbitmq_codegen</codegen.dir>
<codegen.spec_version>0.9.1</codegen.spec_version>
<!-- For testing only -->
<make.bin>make</make.bin>
<rabbitmq.dir>${deps.dir}/rabbit</rabbitmq.dir>
<rabbitmqctl.bin>${rabbitmq.dir}/scripts/rabbitmqctl</rabbitmqctl.bin>
<test-keystore.ca>${project.build.directory}/ca.keystore</test-keystore.ca>
<test-keystore.empty>${project.build.directory}/empty.keystore</test-keystore.empty>
<test-keystore.password>bunnies</test-keystore.password>
<test-broker.A.nodename>rabbit@localhost</test-broker.A.nodename>
<test-broker.A.node_port>5672</test-broker.A.node_port>
<test-broker.A.config_file>${project.build.directory}/test-classes/${test-broker.A.nodename}</test-broker.A.config_file>
<test-broker.B.nodename>hare@localhost</test-broker.B.nodename>
<test-broker.B.node_port>5673</test-broker.B.node_port>
<test-broker.B.config_file>${project.build.directory}/test-classes/${test-broker.B.nodename}</test-broker.B.config_file>
<!-- to sign artifacts when releasing -->
<gpg.keyname>6026DFCA</gpg.keyname>
</properties>
<profiles>
<profile>
If we detect the RabbitMQ Umbrella project, use its dependencies
directory.
<id>in-umbrella</id>
<activation>
<exists>../../UMBRELLA.md</exists>
</file>
</activation>
<properties>
<deps.dir>${basedir}/..</deps.dir>
</properties>
</profile>
<profile>
<!-- On FreeBSD, GNU Make is installed as "gmake". -->
<id>use-gmake</id>
<activation>
<os><name>FreeBSD</name></os>
</activation>
<properties>
<make.bin>gmake</make.bin>
</properties>
</profile>
<profile>
<!-- On Windows, use the Batch version of rabbitmqctl. -->
<id>use-rabbitmqctl.bat</id>
<activation>
<os><family>Windows</family></os>
</activation>
<properties>
<rabbitmqctl.bin>${rabbitmq.dir}/scripts/rabbitmqctl.bat</rabbitmqctl.bin>
</properties>
</profile>
<profile>
Java 8's Javadoc is way more sensible to documentation
correctness. For now, disable all those errors until we fix them.
<id>disable-java8-doclint</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<properties>
<javadoc.opts>-Xdoclint:none</javadoc.opts>
</properties>
</profile>
<profile>
We need this option in Java 11+ to avoid an
extra 'undefined' segment in the URL
<id>javadoc-no-module-dir-java-11</id>
<activation>
<jdk>[11,)</jdk>
</activation>
<properties>
<javadoc.joption>--no-module-directories</javadoc.joption>
</properties>
</profile>
<profile>
To ease testing of the Java client, this POM can setup a RabbitMQ
cluster automatically, including TLS support.
It depends on the presence of ${rabbitmq.dir} which points to
a working copy of the rabbitmq-server Git repository. If it
is missing, nothing is setup and the testsuite relies on an
externally provided broker/cluster.
If you want to explicitly disable the automatic cluster setup,
you must disable this profile:
mvn verify -P '!setup-test-cluster'
<id>setup-test-cluster</id>
<activation>
<property>
<name>!skipTests</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version>${groovy.maven.plugin.version}</version>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>${groovy.all.version}</version>
</dependency>
</dependencies>
<executions>
We use "${rabbitmq.dir}/Makefile" to query the location of
the test TLS certificates.
<execution>
<phase>generate-test-resources</phase>
<id>query-test-tls-certs-dir</id>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
${groovy-scripts.dir}/query_test_tls_certs_dir.groovy
</source>
</configuration>
</execution>
Start two brokers and cluster them.
Currently, those test brokers will listen to the default
TCP ports of 5672 and 5673 for AMQP and 5671 and 5670
for AMQP+TLS. Unfortunately, this means no other standard
RabbitMQ can run on the same host at the same time.
<execution>
<phase>pre-integration-test</phase>
<id>start-test-broker-A</id>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<properties>
<nodename>${test-broker.A.nodename}</nodename>
<node_port>${test-broker.A.node_port}</node_port>
</properties>
<source>
${groovy-scripts.dir}/manage_test_broker.groovy
</source>
</configuration>
</execution>
<execution>
<phase>pre-integration-test</phase>
<id>start-test-broker-B</id>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<properties>
<nodename>${test-broker.B.nodename}</nodename>
<node_port>${test-broker.B.node_port}</node_port>
</properties>
<source>
${groovy-scripts.dir}/manage_test_broker.groovy
</source>
</configuration>
</execution>
<execution>
<phase>pre-integration-test</phase>
<id>create-test-cluster</id>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<properties>
<nodename>${test-broker.B.nodename}</nodename>
<target>${test-broker.A.nodename}</target>
</properties>
<source>
${groovy-scripts.dir}/manage_test_broker.groovy
</source>
</configuration>
</execution>
After the testsuite, no matter the result, stop both test brokers.
<execution>
<phase>post-integration-test</phase>
<id>stop-test-broker-B</id>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<properties>
<nodename>${test-broker.B.nodename}</nodename>
</properties>
<source>
${groovy-scripts.dir}/manage_test_broker.groovy
</source>
</configuration>
</execution>
<execution>
<phase>post-integration-test</phase>
<id>stop-test-broker-A</id>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<properties>
<nodename>${test-broker.A.nodename}</nodename>
</properties>
<source>
${groovy-scripts.dir}/manage_test_broker.groovy
</source>
</configuration>
</execution>
</executions>
</plugin>
Generate two Java keystores from the test TLS certificates.
Here, we only enable the plugin. The actual configuration is
in the main <build /> element.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>keytool-maven-plugin</artifactId>
<version>${keytool.maven.plugin.version}</version>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
If the caller decided to provide an external RabbitMQ
broker/cluster, he can specify the path to his test TLS
certificates with the ${test-tls-certs.dir} property.
Thus, if the CA certificate exists, we also enable the generation
of the two Java keystores.
<id>use-provided-test-keystores</id>
<activation>
<exists>${test-tls-certs.dir}/testca/cacert.pem</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>keytool-maven-plugin</artifactId>
<version>${keytool.maven.plugin.version}</version>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
Tests are integration tests, not unit tests, because they depend
on a running broker which can be automatically started by this
To skip those tests, you can run use the usual ${skipTests}
property:
mvn verify -DskipTests
<id>integration-tests</id>
<activation>
<property>
<name>!skipTests</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven.failsafe.plugin.version}</version>
<configuration>
<systemPropertyVariables>
<make.bin>${make.bin}</make.bin>
<rabbitmq.dir>${rabbitmq.dir}</rabbitmq.dir>
<rabbitmqctl.bin>${rabbitmqctl.bin}</rabbitmqctl.bin>
<test-keystore.ca>${test-keystore.ca}</test-keystore.ca>
<test-keystore.empty>${test-keystore.empty}</test-keystore.empty>
<test-keystore.password>${test-keystore.password}</test-keystore.password>
<test-client-cert.path>${test-tls-certs.dir}/client/keycert.p12</test-client-cert.path>
<test-client-cert.password>changeme</test-client-cert.password>
<test-broker.A.nodename>${test-broker.A.nodename}</test-broker.A.nodename>
<test-broker.A.node_port>${test-broker.A.node_port}</test-broker.A.node_port>
<test-broker.A.config_file>${test-broker.A.config_file}</test-broker.A.config_file>
<test-broker.B.nodename>${test-broker.B.nodename}</test-broker.B.nodename>
<test-broker.B.node_port>${test-broker.B.node_port}</test-broker.B.node_port>
<test-broker.B.config_file>${test-broker.B.config_file}</test-broker.B.config_file>
</systemPropertyVariables>
<environmentVariables>
<DEPS_DIR>${deps.dir}</DEPS_DIR>
</environmentVariables>
<failIfNoTests>true</failIfNoTests>
<includes>
<include>**/ClientTests.*</include>
<include>**/FunctionalTests.*</include>
<include>**/SSLTests.*</include>
<include>**/ServerTests.*</include>
<include>**/HATests.*</include>
</includes>
needed because of bug in OpenJDK 8 u181 on Debian distros
see https://stackoverflow.com/questions/53010200/maven-surefire-could-not-find-forkedbooter-class
<argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>verify</id>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
Profile to activate the NIO mode in the test suite:
mvn verify -P use-nio
<profile>
<id>use-nio</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven.failsafe.plugin.version}</version>
<configuration>
<systemPropertyVariables>
<use.nio>true</use.nio>
</systemPropertyVariables>
needed because of bug in OpenJDK 8 u181 on Debian distros
see https://stackoverflow.com/questions/53010200/maven-surefire-could-not-find-forkedbooter-class
<argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
The "ossrh-release" Maven profile is used to push release artifacts to a
Sonatype staging repository.
<id>ossrh-release</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven.javadoc.plugin.version}</version>
<configuration>
<additionalOptions>${javadoc.opts}</additionalOptions>
<additionalJOption>${javadoc.joption}</additionalJOption>
<quiet>true</quiet>
<source>8</source>
</configuration>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>${maven.gpg.plugin.version}</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>package</phase>
<goals>
<goal>sign</goal>
</goals>
<configuration>
<keyname>${gpg.keyname}</keyname>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
</profile>
The "bintray-release" Maven profile is used to push release artifacts to the
Bintray Release Maven Repository.
<profile>
<id>bintray-release</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven.javadoc.plugin.version}</version>
<configuration>
<additionalOptions>${javadoc.opts}</additionalOptions>
<additionalJOption>${javadoc.joption}</additionalJOption>
<quiet>true</quiet>
<source>8</source>
</configuration>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>${maven.gpg.plugin.version}</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>package</phase>
<goals>
<goal>sign</goal>
</goals>
<configuration>
<keyname>${gpg.keyname}</keyname>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>bintray-rabbitmq-maven</id>
<name>rabbitmq-maven</name>
<url>https://api.bintray.com/maven/rabbitmq/maven/com.rabbitmq:amqp-client/;publish=1</url>
</repository>
</distributionManagement>
</profile>
The "milestone" Maven profile is used to push release artifacts to the
PackageCloud Milestones Maven Repository.
<profile>
<id>milestone</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven.javadoc.plugin.version}</version>
<configuration>
<additionalOptions>${javadoc.opts}</additionalOptions>
<additionalJOption>${javadoc.joption}</additionalJOption>
<quiet>true</quiet>
<source>8</source>
</configuration>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>net.nicoulaj.maven.plugins</groupId>
<artifactId>checksum-maven-plugin</artifactId>
<version>${checksum.maven.plugin.version}</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>package</phase>
<goals>
<goal>files</goal>
</goals>
<configuration>
<fileSets>
<fileSet>
<directory>${project.build.directory}</directory>
<includes>
<include>*.jar</include>
<include>*.pom</include>
</includes>
</fileSet>
</fileSets>
<algorithms>
<algorithm>MD5</algorithm>
<algorithm>SHA-1</algorithm>
</algorithms>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>${maven.gpg.plugin.version}</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>package</phase>
<goals>
<goal>sign</goal>
</goals>
<configuration>
<keyname>${gpg.keyname}</keyname>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>packagecloud-rabbitmq-maven-milestones</id>
<url>packagecloud+https://packagecloud.io/rabbitmq/maven-milestones</url>
</repository>
</distributionManagement>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>${metrics.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
<version>${micrometer.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>${awaitility.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>${jetty.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>${bouncycastle.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.5.0.1254</version>
</plugin>
</plugins>
</pluginManagement>
<!-- We store the client version in a Java properties file. -->
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
Those resources are a Java properties file and RabbitMQ
configuration files for the test brokers.
<testResources>
<testResource>
<directory>${basedir}/src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven.resources.plugin.version}</version>
</plugin>
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version>${groovy.maven.plugin.version}</version>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>${groovy.all.version}</version>
</dependency>
</dependencies>
<executions>
Generate Java source files from specifications found in
${codegen.dir}. The groovy script is used as a "proxy"
to execute a Python script with the proper arguments and
environment.
<execution>
<phase>generate-sources</phase>
<id>generate-amqp-sources</id>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<properties>
<script>${basedir}/codegen.py</script>
${codegen.dir}/amqp-rabbitmq-${codegen.spec_version}.json
</spec>
<header>
${project.build.directory}/generated-sources/src/main/java/com/rabbitmq/client/AMQP.java
</header>
${project.build.directory}/generated-sources/src/main/java/com/rabbitmq/client/impl/AMQImpl.java
</body>
</properties>
<source>
${groovy-scripts.dir}/generate_amqp_sources.groovy
</source>
</configuration>
</execution>
We always remove the generated Java keystores because
keytool(1) complains if the destination file already exists
with the content we want to import.
<execution>
<phase>generate-test-resources</phase>
<id>remove-old-test-keystores</id>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
${groovy-scripts.dir}/remove_old_test_keystores.groovy
</source>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>${build.helper.maven-plugin.version}</version>
<executions>
<execution>
<id>add-generated-sources-dir</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources/src/main/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.plugin.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgs>
<arg>-Xlint:deprecation</arg>
<arg>-Xlint:unchecked</arg>
</compilerArgs>
</configuration>
</plugin>
Disable the unit tests plugin because we only have integration
tests.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.plugin.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<!-- Generate two Java keystores for the SSLTests testsuite. -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>keytool-maven-plugin</artifactId>
<version>${keytool.maven.plugin.version}</version>
<configuration>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>generate-test-ca-keystore</id>
<phase>generate-test-resources</phase>
<goals>
<goal>importCertificate</goal>
</goals>
<configuration>
<file>${test-tls-certs.dir}/testca/cacert.pem</file>
<keystore>${test-keystore.ca}</keystore>
<storepass>${test-keystore.password}</storepass>
<noprompt>true</noprompt>
<alias>server1</alias>
</configuration>
</execution>
<execution>
<id>generate-test-empty-keystore</id>
<phase>generate-test-resources</phase>
<goals>
<goal>importCertificate</goal>
<goal>deleteAlias</goal>
</goals>
<configuration>
<file>${test-tls-certs.dir}/testca/cacert.pem</file>
<keystore>${test-keystore.empty}</keystore>
<storepass>${test-keystore.password}</storepass>
<noprompt>true</noprompt>
<alias>server1</alias>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven.jar.plugin.version}</version>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
<manifestEntries>
<Automatic-Module-Name>com.rabbitmq.client</Automatic-Module-Name>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>${maven.bundle.plugin.version}</version>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
<configuration>
<instructions>
<Export-Package>com.rabbitmq*</Export-Package>
<Bundle-SymbolicName>com.rabbitmq.client</Bundle-SymbolicName>
<Specification-Title>AMQP</Specification-Title>
<Specification-Version>0.9.1</Specification-Version>
<Specification-Vendor>AMQP Working Group (www.amqp.org)</Specification-Vendor>
<Implementation-Title>${project.name}</Implementation-Title>
<Implementation-Version>${project.version}</Implementation-Version>
<Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
<Implementation-URL>${project.url}</Implementation-URL>
</instructions>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>${versions.maven.plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>${maven.release.plugin.version}</version>
<configuration>
<tagNameFormat>v@{project.version}</tagNameFormat>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${maven.source.plugin.version}</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven.javadoc.plugin.version}</version>
<configuration>
<additionalOptions>${javadoc.opts}</additionalOptions>
<additionalJOption>${javadoc.joption}</additionalJOption>
<quiet>true</quiet>
<source>8</source>
</configuration>
</plugin>
</plugins>
<extensions>
<extension>
<groupId>io.packagecloud.maven.wagon</groupId>
<artifactId>maven-packagecloud-wagon</artifactId>
<version>${maven.packagecloud.wagon.version}</version>