Dependency Management¶
Managing libraries for Cassandra is a bit less straight forward compared to other projects, as the build process is based on ant, maven and manually managed jars. Make sure to follow the steps below carefully and pay attention to any emerging issues in the Jenkins CI Environment and reported related issues on Jira/ML, in case of any project dependency changes.
As Cassandra is an Apache product, all included libraries must follow Apache’s software license requirements.
Required steps to add or update libraries¶
- Add or replace jar file in
lib
directory - Add or update
lib/license
files - Update dependencies in
build.xml
- Add to
parent-pom
with correct version - Add to
all-pom
if simple Cassandra dependency (see below)
- Add to
POM file types¶
- parent-pom - contains all dependencies with the respective version. All other poms will refer to the artifacts with specified versions listed here.
- build-deps-pom(-sources) + coverage-deps-pom - used by
ant build
compile target. Listed dependenices will be resolved and copied tobuild/lib/{jar,sources}
by executing themaven-ant-tasks-retrieve-build
target. This should contain libraries that are required for build tools (grammar, docs, instrumentation), but are not shipped as part of the Cassandra distribution. - test-deps-pom - refered by
maven-ant-tasks-retrieve-test
to retrieve and save dependencies tobuild/test/lib
. Exclusively used during JUnit test execution. - all-pom - pom for cassandra-all.jar that can be installed or deployed to public maven repos via
ant publish
- dist-pom - pom for tarball distribution (cassandra-{bin,src}.tar.gz) created by
ant artifacts
. Should be left as is, but needed for installing or deploying releases.
Troubleshooting and conflict resolution¶
Here are some useful commands that may help you out resolving conflicts.
ant realclean
- gets rid of the build directory, including build artifacts.mvn dependency:tree -f build/apache-cassandra-*-SNAPSHOT.pom -Dverbose -Dincludes=org.slf4j
- shows transitive dependency tree for artifacts, e.g. org.slf4j. In case the command above fails due to a missing parent pom file, try runningant mvn-install
.rm ~/.m2/repository/org/apache/cassandra/apache-cassandra/
- removes cached local Cassandra maven artifacts