diff --git a/core-shaded/pom.xml b/core-shaded/pom.xml
index 87a8c01aa51..acb6fabaa51 100644
--- a/core-shaded/pom.xml
+++ b/core-shaded/pom.xml
@@ -117,10 +117,12 @@
com.github.stephenc.jcip
jcip-annotations
+ provided
com.github.spotbugs
spotbugs-annotations
+ provided
+
+ 4.0.0
+
+ com.datastax.oss
+ java-driver-parent
+ 4.5.0
+
+ java-driver-distribution-tests
+ Apache Cassandra Java Driver - distribution tests
+
+
+
+ ${project.groupId}
+ java-driver-bom
+ ${project.version}
+ pom
+ import
+
+
+
+
+
+ com.datastax.oss
+ java-driver-test-infra
+ test
+
+
+ com.datastax.oss
+ java-driver-query-builder
+ test
+
+
+ com.datastax.oss
+ java-driver-mapper-processor
+ test
+
+
+ com.datastax.oss
+ java-driver-mapper-runtime
+ test
+
+
+ com.datastax.oss
+ java-driver-core
+ test
+
+
+ junit
+ junit
+ test
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ 1
+
+
+
+ org.revapi
+ revapi-maven-plugin
+
+ true
+
+
+
+ maven-install-plugin
+
+ true
+
+
+
+ maven-deploy-plugin
+
+ true
+
+
+
+ org.sonatype.plugins
+ nexus-staging-maven-plugin
+
+ true
+
+
+
+
+
diff --git a/distribution-tests/src/test/java/com/datastax/oss/driver/api/core/DriverDependencyTest.java b/distribution-tests/src/test/java/com/datastax/oss/driver/api/core/DriverDependencyTest.java
new file mode 100644
index 00000000000..2c4a22f45dc
--- /dev/null
+++ b/distribution-tests/src/test/java/com/datastax/oss/driver/api/core/DriverDependencyTest.java
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ */
+package com.datastax.oss.driver.api.core;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.datastax.oss.driver.api.core.session.Session;
+import com.datastax.oss.driver.api.mapper.MapperBuilder;
+import com.datastax.oss.driver.api.querybuilder.QueryBuilder;
+import com.datastax.oss.driver.api.testinfra.CassandraResourceRule;
+import com.datastax.oss.driver.internal.core.util.Reflection;
+import com.datastax.oss.driver.internal.mapper.processor.MapperProcessor;
+import org.junit.Test;
+
+public class DriverDependencyTest {
+ @Test
+ public void should_include_core_jar() {
+ assertThat(Reflection.loadClass(null, "com.datastax.oss.driver.api.core.session.Session"))
+ .isEqualTo(Session.class);
+ }
+
+ @Test
+ public void should_include_query_builder_jar() {
+ assertThat(Reflection.loadClass(null, "com.datastax.oss.driver.api.querybuilder.QueryBuilder"))
+ .isEqualTo(QueryBuilder.class);
+ }
+
+ @Test
+ public void should_include_mapper_processor_jar() {
+ assertThat(
+ Reflection.loadClass(
+ null, "com.datastax.oss.driver.internal.mapper.processor.MapperProcessor"))
+ .isEqualTo(MapperProcessor.class);
+ }
+
+ @Test
+ public void should_include_mapper_runtime_jar() {
+ assertThat(Reflection.loadClass(null, "com.datastax.oss.driver.api.mapper.MapperBuilder"))
+ .isEqualTo(MapperBuilder.class);
+ }
+
+ @Test
+ public void should_include_test_infra_jar() {
+ assertThat(
+ Reflection.loadClass(
+ null, "com.datastax.oss.driver.api.testinfra.CassandraResourceRule"))
+ .isEqualTo(CassandraResourceRule.class);
+ }
+}
diff --git a/distribution-tests/src/test/java/com/datastax/oss/driver/api/core/OptionalDependencyTest.java b/distribution-tests/src/test/java/com/datastax/oss/driver/api/core/OptionalDependencyTest.java
new file mode 100644
index 00000000000..b37ae24bc06
--- /dev/null
+++ b/distribution-tests/src/test/java/com/datastax/oss/driver/api/core/OptionalDependencyTest.java
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+package com.datastax.oss.driver.api.core;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.datastax.oss.driver.internal.core.util.DependencyCheck;
+import org.junit.Test;
+
+public class OptionalDependencyTest {
+ @Test
+ public void should_not_include_snappy_jar() {
+ assertThat(DependencyCheck.SNAPPY.isPresent()).isFalse();
+ }
+
+ @Test
+ public void should_not_include_l4z_jar() {
+ assertThat(DependencyCheck.LZ4.isPresent()).isFalse();
+ }
+}
diff --git a/distribution-tests/src/test/java/com/datastax/oss/driver/api/core/ProvidedDependencyTest.java b/distribution-tests/src/test/java/com/datastax/oss/driver/api/core/ProvidedDependencyTest.java
new file mode 100644
index 00000000000..1070bbc2fb1
--- /dev/null
+++ b/distribution-tests/src/test/java/com/datastax/oss/driver/api/core/ProvidedDependencyTest.java
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+package com.datastax.oss.driver.api.core;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.datastax.oss.driver.internal.core.util.Reflection;
+import org.junit.Test;
+
+public class ProvidedDependencyTest {
+ @Test
+ public void should_not_include_graal_sdk_jar() {
+ assertThat(Reflection.loadClass(null, "org.graalvm.nativeimage.VMRuntime")).isNull();
+ }
+
+ @Test
+ public void should_not_include_spotbugs_annotations_jar() {
+ assertThat(Reflection.loadClass(null, "edu.umd.cs.findbugs.annotations.NonNull")).isNull();
+ }
+
+ @Test
+ public void should_not_include_jicp_annotations_jar() {
+ assertThat(Reflection.loadClass(null, "net.jcip.annotations.ThreadSafe")).isNull();
+ }
+
+ @Test
+ public void should_not_include_blockhound_jar() {
+ assertThat(Reflection.loadClass(null, "reactor.blockhound.BlockHoundRuntime")).isNull();
+ }
+}
diff --git a/examples/pom.xml b/examples/pom.xml
index f092b4bbe9f..5df17ac9748 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -137,6 +137,11 @@
bcrypt
0.8.0
+
+ com.github.spotbugs
+ spotbugs-annotations
+ provided
+
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index d2d1f3db065..5281216574f 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -73,6 +73,11 @@
test-jar
test
+
+ com.github.stephenc.jcip
+ jcip-annotations
+ test
+
com.github.spotbugs
spotbugs-annotations
diff --git a/manual/core/integration/README.md b/manual/core/integration/README.md
index 02bcbfb65a3..44784a56ace 100644
--- a/manual/core/integration/README.md
+++ b/manual/core/integration/README.md
@@ -445,25 +445,22 @@ The driver team uses annotations to document certain aspects of the code:
* nullability with [SpotBugs](https://spotbugs.github.io/) annotations `@Nullable` and `@NonNull`.
This is mostly used during development; while these annotations are retained in class files, they
-serve no purpose at runtime. If you want to minimize the number of JARs in your classpath, you can
-exclude them:
+serve no purpose at runtime. This class is an optional dependency of the driver. If you wish to
+make use of these annotations in your own code you have to explicitly depend on these jars:
```xml
-
- com.datastax.oss
- java-driver-core
- ${driver.version}
-
-
- com.github.stephenc.jcip
- jcip-annotations
-
-
- com.github.spotbugs
- spotbugs-annotations
-
-
-
+
+
+ com.github.stephenc.jcip
+ jcip-annotations
+ 1.0-1
+
+
+ com.github.spotbugs
+ spotbugs-annotations
+ 3.1.12
+
+
```
However, there is one case when excluding those dependencies won't work: if you use [annotation
diff --git a/mapper-processor/pom.xml b/mapper-processor/pom.xml
index 944a0ccc84d..bc1cb447487 100644
--- a/mapper-processor/pom.xml
+++ b/mapper-processor/pom.xml
@@ -54,10 +54,12 @@
com.github.stephenc.jcip
jcip-annotations
+ provided
com.github.spotbugs
spotbugs-annotations
+ provided
com.google.testing.compile
diff --git a/mapper-runtime/pom.xml b/mapper-runtime/pom.xml
index cbdd534055a..a1cfb8a44b6 100644
--- a/mapper-runtime/pom.xml
+++ b/mapper-runtime/pom.xml
@@ -51,10 +51,12 @@
com.github.stephenc.jcip
jcip-annotations
+ provided
com.github.spotbugs
spotbugs-annotations
+ provided
junit
diff --git a/pom.xml b/pom.xml
index 57fdfa4e8b9..4b6c078a626 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,6 +36,7 @@
test-infra
integration-tests
distribution
+ distribution-tests
examples
bom
diff --git a/query-builder/pom.xml b/query-builder/pom.xml
index efdb185b148..494cc9490fb 100644
--- a/query-builder/pom.xml
+++ b/query-builder/pom.xml
@@ -51,10 +51,12 @@
com.github.stephenc.jcip
jcip-annotations
+ provided
com.github.spotbugs
spotbugs-annotations
+ provided
junit
diff --git a/test-infra/pom.xml b/test-infra/pom.xml
index 1fdc3f35eb2..962aa907c4c 100644
--- a/test-infra/pom.xml
+++ b/test-infra/pom.xml
@@ -48,7 +48,7 @@
com.github.spotbugs
spotbugs-annotations
- true
+ provided
junit