blob: 3bf53b435fa0ad16b2d78bd47ca607692e08ab78 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Apache Cassandra | Apache Cassandra Documentation</title>
<link rel="stylesheet" href="../../assets/css/site.css">
<link rel="schema.dcterms" href="https://purl.org/dc/terms/">
<meta name="dcterms.subject" content="_">
<meta name="dcterms.identifier" content="master">
<meta name="generator" content="Antora 2.3.4">
<link rel="icon" href="../../assets/img/favicon.ico" type="image/x-icon">
<script>
const script = document.createElement("script");
const domain = window.location.hostname;
script.type = "text/javascript";
script.src = "https://plausible.cassandra.apache.org/js/plausible.js";
script.setAttribute("data-domain",domain);
script.setAttribute("defer",'true');
script.setAttribute("async",'true');
document.getElementsByTagName("head")[0].appendChild(script);
</script> </head>
<body class="basic ">
<div class="container mx-auto relative">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<meta property="og:type" content="website" />
<meta property="og:url" content="/" />
<meta property="og:site_name" content="Apache Cassandra" />
<header id="top-nav">
<div class="inner relative">
<div class="header-social-icons text-right">
<a href="https://twitter.com/cassandra?lang=en" target="_blank" styles="margin-left: 20px;"><img src="../../assets/img/twitter-icon-circle-white.svg" alt="twitter icon" width="24"></a>
<a href="https://www.linkedin.com/company/apache-cassandra/" target="_blank" styles="margin-left: 20px;"><img src="../../assets/img/LI-In-Bug.png" alt="linked-in icon" width="24"></a>
<a href="https://www.youtube.com/c/PlanetCassandra" target="_blank" styles="margin-left: 20px;"><img src="../../assets/img/youtube-icon.png" alt="youtube icon" width="24"></a>
</div>
<div class="cf">
<div class="logo left"><a href="/"><img src="../../assets/img/logo-white-r.png" alt="cassandra logo"></a></div>
<div class="mobile-nav-icon right">
<img class="toggle-icon" src="../../assets/img/hamburger-nav.svg">
</div>
<ul class="main-nav nav-links right flex flex-vert-center flex-space-between">
<li>
<a class="nav-link hide-mobile">Get Started</a>
<ul class="sub-menu bg-white">
<li class="pa-micro">
<a href="/_/cassandra-basics.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-basics.png" alt="cassandra basics icon">
</div>
<div class="sub-nav-text teal py-small">
Cassandra Basics
</div>
</a>
</li>
<li class="pa-micro">
<a href="/_/quickstart.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-rocket.png" alt="cassandra basics icon">
</div>
<div class="sub-nav-text teal py-small">
Quickstart
</div>
</a>
</li>
<li class="pa-micro">
<a href="/_/ecosystem.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-ecosystem.png" alt="cassandra basics icon">
</div>
<div class="sub-nav-text teal py-small">
Ecosystem
</div>
</a>
</li>
</ul>
</li>
<li><a class="nav-link" href="/doc/latest/">Documentation</a></li>
<li>
<a class="nav-link" href="/_/community.html">Community</a>
<ul class="sub-menu bg-white">
<li class="pa-micro">
<a href="/_/community.html#code-of-conduct">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-welcome.png" alt="welcome icon">
</div>
<div class="sub-nav-text teal py-small">
Welcome
</div>
</a>
</li>
<li class="pa-micro hide-mobile">
<a href="/_/community.html#discussions">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-discussions.png" alt="discussions icon">
</div>
<div class="sub-nav-text teal py-small">
Discussions
</div>
</a>
</li>
<li class="pa-micro hide-mobile">
<a href="/_/community.html#project-governance">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-governance.png" alt="Governance icon">
</div>
<div class="sub-nav-text teal py-small">
Governance
</div>
</a>
</li>
<li class="pa-micro hide-mobile">
<a href="/_/community.html#how-to-contribute">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-contribute.png" alt="Contribute icon">
</div>
<div class="sub-nav-text teal py-small">
Contribute
</div>
</a>
</li>
<li class="pa-micro hide-mobile">
<a href="/_/community.html#meet-the-community">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-community.png" alt="Meet the Community icon">
</div>
<div class="sub-nav-text teal py-small">
Meet the Community
</div>
</a>
</li>
<li class="pa-micro hide-mobile">
<a href="/_/cassandra-catalyst-program.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-catalyst.png" alt="Catalyst icon">
</div>
<div class="sub-nav-text teal py-small">
Catalyst Program
</div>
</a>
</li>
<li class="pa-micro hide-mobile">
<a href="/_/events.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-events.png" alt="Events icon">
</div>
<div class="sub-nav-text teal py-small">
Events
</div>
</a>
</li>
</ul>
</li>
<li>
<a class="nav-link hide-mobile">Learn</a>
<ul class="sub-menu bg-white">
<li class="pa-micro">
<a href="/_/Apache-Cassandra-5.0-Moving-Toward-an-AI-Driven-Future.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-basics.png" alt="Basics icon">
</div>
<div class="sub-nav-text teal py-small">
Cassandra 5.0
</div>
</a>
</li>
<li class="pa-micro">
<a href="/_/case-studies.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-case-study.png" alt="Case Studies icon">
</div>
<div class="sub-nav-text teal py-small">
Case Studies
</div>
</a>
</li>
<li class="pa-micro">
<a href="/_/resources.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-resources.png" alt="Resources icon">
</div>
<div class="sub-nav-text teal py-small">
Resources
</div>
</a>
</li>
<li class="pa-micro">
<a href="/_/blog.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-blog.png" alt="Blog icon">
</div>
<div class="sub-nav-text teal py-small">
Blog
</div>
</a>
</li>
</ul>
</li>
<li><a class="nav-link btn btn--filled" href="/_/download.html">Download Now</a></li>
</ul>
</div>
</div>
</header>
<div class="hero hero--home grad">
<div class="eye"></div>
<div id="home-content" class="text-center flex flex-center flex-column relative z2 ma-xlarge">
<h1></h1>
</div>
</div>
<div class="flex-center py-large arrow">
<div class="inner inner--narrow">
<div class="sect1">
<h2 id="dependency-management"><a class="anchor" href="#dependency-management"></a>Dependency Management</h2>
<div class="sectionbody">
<div class="paragraph">
<p>New dependencies should not be included without community consensus first being
obtained via a <code>[DISCUSS]</code> thread on the <a href="mailto:dev@cassandra.apache.org">dev@cassandra.apache.org</a> mailing list.</p>
</div>
<div class="paragraph">
<p>As Cassandra is an ASF project, all included libraries must follow Apache&#8217;s
<a href="https://www.apache.org/legal/resolved.html">software license requirements</a>.</p>
</div>
<div class="paragraph">
<p>Cassandra uses the Ant build system and Maven POMs for dependency
specification. In Cassandra 5.0 the format of POMs was moved from within the
<code>build.xml</code> file to separate POM template files that are processed by Ant. In
both pre-5.0 and post-5.0 Cassandra, there are several POMs that dependencies
can be included in:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><strong>parent-pom</strong></p>
<div class="ulist">
<ul>
<li>
<p>Contains all dependencies with the respective version. All other poms
will refer to the artifacts with specified versions listed here.</p>
</li>
<li>
<p>Since Cassandra 5.0, the <code>parent-pom</code> template is <code>.build/parent-pom-template.xml</code>.</p>
</li>
</ul>
</div>
</li>
<li>
<p><strong>build-deps-pom(-sources)</strong> + <strong>coverage-deps-pom</strong></p>
<div class="ulist">
<ul>
<li>
<p>used by the <code>ant build</code> target. Listed dependencies will be resolved and
copied to <code>build/lib/{jar,sources}</code> by executing the
<code>maven-ant-tasks-retrieve-build</code> target. This should contain libraries that are
required for build tools (grammar, docs, instrumentation), but are not
shipped as part of the Cassandra distribution.</p>
</li>
<li>
<p>Since Cassandra 4.0, <code>coverage-deps-pom</code> has been removed and the
<code>build-deps-pom</code> template is <code>.build/cassandra-build-deps-template.xml</code>.</p>
</li>
</ul>
</div>
</li>
<li>
<p><strong>all-pom</strong></p>
<div class="ulist">
<ul>
<li>
<p>POM for
<a href="https://mvnrepository.com/artifact/org.apache.cassandra/cassandra-all">cassandra-all.jar</a>.
See <a href="/_/development/release_process.html">release process docs</a>.</p>
</li>
<li>
<p>Since Cassandra 5.0, the <code>all-pom</code> template is <code>.build/cassandra-deps-template.xml</code>.</p>
</li>
</ul>
</div>
</li>
<li>
<p><strong>test-deps-pom</strong></p>
<div class="ulist">
<ul>
<li>
<p>Referenced by <code>maven-ant-tasks-retrieve-test</code> to retrieve and save
dependencies to <code>build/test/lib</code>. Exclusively used during JUnit test
execution.</p>
</li>
<li>
<p>Since Cassandra 3.0, <code>test-deps-pom</code> has been removed.</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>The <code>ant write-poms</code> target produces valid POM files in the <code>build/</code> directory.</p>
</div>
<div class="paragraph">
<p>Dependencies added to the <code>lib/</code> directory are built into the release artifacts
by the <code>ant artifacts</code> target (see target <code>resolver-dist-lib</code>). Libraries
distributed this way must meet the
<a href="https://www.apache.org/legal/resolved.html">ASF distribution policy</a>.</p>
</div>
<div class="sect2">
<h3 id="dependency-management-before-cassandra-5-0"><a class="anchor" href="#dependency-management-before-cassandra-5-0"></a>Dependency management before Cassandra 5.0</h3>
<div class="paragraph">
<p>To update dependencies, update the parent and child POM definitions in
<code>build.xml</code>. The parent POM should include the <code>dependency</code> tag with <code>groupId</code>,
<code>artifactId</code>, <code>version</code>, and optional <code>scope</code> fields. The child POM(s) should
include the <code>dependency</code> tag with <code>groupId</code> and <code>artifactId</code>. See the
<a href="https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management">Maven docs</a>
for a complete reference on how to reference dependencies across parent and
child POMs.</p>
</div>
<div class="paragraph">
<p>Here is
<a href="https://github.com/apache/cassandra/commit/4b3f07fc74089151efeff7a8fdfa9c414a1f0d6a#diff-766797f233c18114f9499750cf1ffbf3829aeea50283850619c01bd173132021">an example</a>
of a commit that changes dependency versions pre-5.0.</p>
</div>
</div>
<div class="sect2">
<h3 id="dependency-management-in-cassandra-5-0-and-later"><a class="anchor" href="#dependency-management-in-cassandra-5-0-and-later"></a>Dependency management in Cassandra 5.0 and later</h3>
<div class="paragraph">
<p>In Cassandra 5.0 and later, dependencies are managed in Maven POM templates in
<code>.build/*-template.xml</code>. These templates are processed into valid Maven POMs
and copied to <code>build/\*.pom</code> by the <code>ant write-poms</code> task.</p>
</div>
<div class="paragraph">
<p>For new dependencies, add to <code>parent-pom-template</code> and
<code>cassandra-deps-template</code>, and optionally <code>cassandra-build-deps-template</code> if
the dependency is required for build only. See
<a href="https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management">the Maven docs</a>
on how to reference dependencies in the parent POM from the child POMs.</p>
</div>
<div class="paragraph">
<p>For dependency versions that need to be available in <code>build.xml</code> and
<code>parent-pom-template</code>, specify the version as a property in <code>build.xml</code>, add it
to the <code>ant write-poms</code> target, then add the property to <code>parent-pom-template</code>
with the value of the template substitution.</p>
</div>
<div class="paragraph">
<p>Here is
<a href="https://github.com/apache/cassandra/commit/b61bd93e574503aff8c29f0efefbe9879d3b32eb">an example</a>
of a commit that changes dependency versions since 5.0.</p>
</div>
</div>
<div class="sect2">
<h3 id="troubleshooting-and-conflict-resolution"><a class="anchor" href="#troubleshooting-and-conflict-resolution"></a>Troubleshooting and conflict resolution</h3>
<div class="paragraph">
<p>Here are some useful commands that may help you out resolving conflicts.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>ant realclean</code> - gets rid of the build directory, including build
artifacts.</p>
</li>
<li>
<p><code>mvn dependency:tree -f build/apache-cassandra-\*-SNAPSHOT.pom -Dverbose -Dincludes=org.slf4j</code></p>
<div class="ulist">
<ul>
<li>
<p>shows transitive dependency tree for artifacts, e.g. org.slf4j. In
case the command above fails due to a missing parent pom file, try
running <code>ant mvn-install</code>.</p>
</li>
</ul>
</div>
</li>
<li>
<p><code>rm ~/.m2/repository/org/apache/cassandra/apache-cassandra/</code> - removes
cached local Cassandra maven artifacts</p>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="grad grad--two flex-center pb-xlarge">
<div class="inner text-center z2 relative">
<h2 class="white py-small">Get started with Cassandra, fast.</h2>
<a id="footer-cta" href="/_/quickstart.html" class="btn btn--filled ma-medium">Quickstart Guide</a>
</div>
<div class="inner flex flex-distribute-items mt-xlarge z2 relative">
<div class="col-2">
<div id="footer-logo" class="logo logo--footer mb-medium"><img src="../../assets/img/logo-white-r.png" alt="Cassandra Logo"></div>
<p>Apache Cassandra<img src="../../assets/img/registered.svg" alt="®" style="width:18px;"> powers mission-critical deployments with improved performance and unparalleled levels of scale in the cloud.</p>
<div class="footer-social-icons">
<a href="https://twitter.com/cassandra?lang=en" target="_blank"><img src="../../assets/img/twitter-icon-circle-white.svg" alt="twitter icon" width="24"></a>
<a href="https://www.linkedin.com/company/apache-cassandra/" target="_blank"><img src="../../assets/img/LI-In-Bug.png" alt="linked-in icon" width="24"></a>
<a href="https://www.youtube.com/c/PlanetCassandra" target="_blank"><img src="../../assets/img/youtube-icon.png" alt="youtube icon" width="24"></a>
</div>
</div>
<div class="col-2 flex flex-center">
<ul class="columns-2">
<li class="mb-small"><a href="/">Home</a></li>
<li class="mb-small"><a href="/_/cassandra-basics.html">Cassandra Basics</a></li>
<li class="mb-small"><a href="/_/quickstart.html">Quickstart</a></li>
<li class="mb-small"><a href="/_/ecosystem.html">Ecosystem</a></li>
<li class="mb-small"><a href="/doc/latest/">Documentation</a></li>
<li class="mb-small"><a href="/_/community.html">Community</a></li>
<li class="mb-small"><a href="/_/case-studies.html">Case Studies</a></li>
<li class="mb-small"><a href="/_/resources.html">Resources</a></li>
<li class="mb-small"><a href="/_/blog.html">Blog</a></li>
</ul>
</div>
</div>
</footer>
<div class="lower-footer bg-white pa-medium">
<div class="flex flex-row flex-vert-center">
<div class="pr-medium"><img src="../../assets/img//feather-small.png" alt="ASF" width="20"></div>
<div class="pr-medium"><a href="http://www.apache.org/" target="_blank">Foundation</a></div>
<div class="pr-medium"><a href="https://www.apache.org/events/current-event.html" target="_blank">Events</a></div>
<div class="pr-medium"><a href="https://www.apache.org/licenses/" target="_blank">License</a></div>
<div class="pr-medium"><a href="https://www.apache.org/foundation/thanks" target="_blank">Thanks</a></div>
<div class="pr-medium"><a href="https://www.apache.org/security" target="_blank">Security</a></div>
<div class="pr-medium"><a href="https://privacy.apache.org/policies/privacy-policy-public.html" target="_blank">Privacy</a></div>
<div class="pr-medium"><a href="https://www.apache.org/foundation/sponsorship" target="_blank">Sponsorship</a></div>
</div>
<p class="my-medium">© 2009-<script>document.write(new Date().getFullYear())</script> <a href="https://apache.org" target="_blank">The Apache Software Foundation</a> under the terms of the Apache License 2.0. Apache, the Apache feather logo, Apache Cassandra, Cassandra, and the Cassandra logo, are either registered trademarks or trademarks of The Apache Software Foundation.</p>
</div>
<div id="fade" class="hidden"></div>
<div id="modal" class="hidden">
<div id="close-modal" class="cursor-pointer"><svg viewBox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></div>
<div id="mod-content" class="vid-mod-content resp-container"></div>
</div>
<script>
jQuery(function(){
var windowW = $(window).width();
$(document)
.on('click','.mobile-nav-icon',function(){
$('.main-nav').fadeIn();
})
.on('click','.main-nav',function(){
if(windowW <= 1000){
$(this).fadeOut();
}
})
.on('click','#version-toggle',function(){
$(this).toggleClass('active');
$(this).next().fadeToggle();
})
.on('click','#mobile-docs-nav-burger', function(){
$(this).toggleClass('active');
$('.docs-nav').toggleClass('active');
});
var url = window.location.pathname;
var isQuickstart = url.includes('quickstart.html');
if(isQuickstart){
var footerCTA = document.getElementById('footer-cta');
footerCTA.innerHTML = 'Get latest updates';
footerCTA.setAttribute('href', '/_/blog.html');
}
});
</script>
</div>
</body>
<script>
jQuery(function(){
jQuery(document)
.on('click','.cassandra-cloud h3',function(){
var el = jQuery(this);
el.toggleClass('active');
el.next().slideToggle();
})
.on('click','.image-expand img', function(){
$(this).clone().appendTo('#mod-content');
$('#fade,#modal,#close-modal').fadeIn();
$('body,html').addClass('no-scroll');
})
.on('click','#fade,#close-modal', function(){
$('#fade,#modal,#close-modal').fadeOut();
$('body,html').removeClass('no-scroll');
$('#mod-content').html('');
});
});
</script>
</html>