Bug: Revise unused project dependencies
Status: Triage Needed
Priority: Normal
Created: 17/Aug/23 19:08

There are some project dependencies that are no longer used, but they are still declared in the parent pom. I think we can revise the project dependencies and clean up the ones that are not used.

There are two issues here:
- deleting unused dependencies - it should be agreed by the community in advance;
- adding an automation check to prevent the same problem in the future;

As a naive approach to finding the list of unused dependencies, the {{mvn dependency:analyze}} command can be used. The command will not outline the list of dependencies to remove, as some of them may only be used at runtime, so the list should be considered cautiously. We put the built classes in the {{build/classes}} and {{build/test/classes}} directories, which won't work for the maven dependency plugin because it expects the built classes to be in the {{target/classes}} directory - to trick that, we can copy them all there and run the plugin against the built pom file. Below you can find commands to reproduce the result and the result itself.

h3. The command

Tested on the latest trunk (commons-codec is there).
{code}
# copy packages to the build/target/classes to run maven
for d in `find ./build/classes -maxdepth 2 -type d -name org -or -name com`; do `rsync -a $d ./build/target/classes`; done

mvn -f ./build/apache-cassandra-5.0-SNAPSHOT.pom org.apache.maven.plugins:maven-dependency-plugin:3.2.0:analyze -Dverbose=true -DignoreNonCompile
{code}

h3. The result

{code}
[WARNING] Used undeclared dependencies found:
[WARNING]    io.netty:netty-handler:jar:4.1.96.Final:compile
[WARNING]    io.netty:netty-common:jar:4.1.96.Final:compile
[WARNING]    io.netty:netty-buffer:jar:4.1.96.Final:compile
[WARNING]    io.netty:netty-codec:jar:4.1.96.Final:compile
[WARNING]    org.checkerframework:checker-qual:jar:3.10.0:compile
[WARNING]    io.netty:netty-transport:jar:4.1.96.Final:compile
[WARNING]    io.netty:netty-transport-native-unix-common:jar:4.1.96.Final:compile
[WARNING]    io.netty:netty-transport-classes-epoll:jar:4.1.96.Final:compile
[WARNING] Unused declared dependencies found:
[WARNING]    com.github.jnr:jffi:jar:native:1.3.11:compile
[WARNING]    net.openhft:affinity:jar:3.23.3:compile
[WARNING]    org.slf4j:log4j-over-slf4j:jar:1.7.25:compile
[WARNING]    io.netty:netty-transport-native-epoll:jar:4.1.94.Final:compile
[WARNING]    com.github.jnr:jnr-constants:jar:0.10.4:compile
[WARNING]    io.dropwizard.metrics:metrics-logback:jar:3.1.5:compile
[WARNING]    org.antlr:ST4:jar:4.0.8:compile
[WARNING]    org.gridkit.jvmtool:mxdump:jar:0.14:compile
[WARNING]    io.netty:netty-tcnative-boringssl-static:jar:2.0.61.Final:compile
[WARNING]    com.google.j2objc:j2objc-annotations:jar:1.3:compile
[WARNING]    org.gridkit.lab:jvm-attach-api:jar:1.5:compile
[WARNING]    org.gridkit.jvmtool:sjk-json:jar:0.14:compile
[WARNING]    org.slf4j:jcl-over-slf4j:jar:1.7.25:compile
[WARNING]    com.github.jnr:jnr-ffi:jar:2.2.13:compile
[WARNING]    commons-codec:commons-codec:jar:1.9:compile
[WARNING]    org.caffinitas.ohc:ohc-core-j8:jar:0.5.1:compile
[WARNING]    org.bouncycastle:bcpkix-jdk15on:jar:1.70:compile
[WARNING]    net.java.dev.jna:jna-platform:jar:5.13.0:compile
[WARNING]    com.github.jnr:jffi:jar:1.3.11:compile
[WARNING]    io.netty:netty-all:jar:4.1.96.Final:compile
[WARNING]    org.gridkit.jvmtool:sjk-stacktrace:jar:0.14:compile
[WARNING]    io.netty:netty-transport-native-epoll:jar:linux-x86_64:4.1.94.Final:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
{code}