<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.11.1 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.5.0:dependency-info at 2024-04-20

 | Rendered using Apache Maven Default Skin
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="generator" content="Apache Maven Doxia Site Renderer 1.11.1" />
    <title>shardingsphere-infra-database-oracle &#x2013; Dependency Information</title>
    <link rel="stylesheet" href="./css/maven-base.css" />
    <link rel="stylesheet" href="./css/maven-theme.css" />
    <link rel="stylesheet" href="./css/site.css" />
    <link rel="stylesheet" href="./css/print.css" media="print" />
  </head>
  <body class="composite">
    <div id="banner">
<div id="bannerLeft">shardingsphere-infra-database-oracle
</div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
      <div class="xleft">
        <span id="publishDate">Last Published: 2024-04-20</span>
           | <span id="projectVersion">Version: 5.4.2-SNAPSHOT</span>
      </div>
      <div class="xright"><a href="./" title="shardingsphere-infra-database-oracle">shardingsphere-infra-database-oracle</a>      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
       <h5>Parent Project</h5>
    <ul>
     <li class="none"><a href="../index.html" title="shardingsphere-infra-database-type">shardingsphere-infra-database-type</a></li>
    </ul>
       <h5>Project Documentation</h5>
    <ul>
     <li class="expanded"><a href="project-info.html" title="Project Information">Project Information</a>
      <ul>
       <li class="none"><a href="dependencies.html" title="Dependencies">Dependencies</a></li>
       <li class="none"><strong>Dependency Information</strong></li>
       <li class="none"><a href="dependency-management.html" title="Dependency Management">Dependency Management</a></li>
       <li class="none"><a href="distribution-management.html" title="Distribution Management">Distribution Management</a></li>
       <li class="none"><a href="index.html" title="About">About</a></li>
       <li class="none"><a href="licenses.html" title="Licenses">Licenses</a></li>
       <li class="none"><a href="mailing-lists.html" title="Mailing Lists">Mailing Lists</a></li>
       <li class="none"><a href="plugin-management.html" title="Plugin Management">Plugin Management</a></li>
       <li class="none"><a href="plugins.html" title="Plugins">Plugins</a></li>
       <li class="none"><a href="scm.html" title="Source Code Management">Source Code Management</a></li>
       <li class="none"><a href="summary.html" title="Summary">Summary</a></li>
      </ul></li>
     <li class="collapsed"><a href="project-reports.html" title="Project Reports">Project Reports</a></li>
    </ul>
      <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
        <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
      </a>
      </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
<section>
<h2><a name="Dependency_Information"></a>Dependency Information</h2><a name="Dependency_Information"></a><section>
<h3><a name="Apache_Maven"></a>Apache Maven</h3><a name="Apache_Maven"></a>
<div>
<pre>&lt;dependency&gt;
  &lt;groupId&gt;org.apache.shardingsphere&lt;/groupId&gt;
  &lt;artifactId&gt;shardingsphere-infra-database-oracle&lt;/artifactId&gt;
  &lt;version&gt;5.4.2-SNAPSHOT&lt;/version&gt;
&lt;/dependency&gt;</pre></div></section><section>
<h3><a name="Apache_Ivy"></a>Apache Ivy</h3><a name="Apache_Ivy"></a>
<div>
<pre>&lt;dependency org=&quot;org.apache.shardingsphere&quot; name=&quot;shardingsphere-infra-database-oracle&quot; rev=&quot;5.4.2-SNAPSHOT&quot;&gt;
  &lt;artifact name=&quot;shardingsphere-infra-database-oracle&quot; type=&quot;jar&quot; /&gt;
&lt;/dependency&gt;</pre></div></section><section>
<h3><a name="Groovy_Grape"></a>Groovy Grape</h3><a name="Groovy_Grape"></a>
<div>
<pre>@Grapes(
@Grab(group='org.apache.shardingsphere', module='shardingsphere-infra-database-oracle', version='5.4.2-SNAPSHOT')
)</pre></div></section><section>
<h3><a name="Gradle.2FGrails"></a>Gradle/Grails</h3><a name="Gradle.2FGrails"></a>
<div>
<pre>implementation 'org.apache.shardingsphere:shardingsphere-infra-database-oracle:5.4.2-SNAPSHOT'</pre></div></section><section>
<h3><a name="Scala_SBT"></a>Scala SBT</h3><a name="Scala_SBT"></a>
<div>
<pre>libraryDependencies += &quot;org.apache.shardingsphere&quot; % &quot;shardingsphere-infra-database-oracle&quot; % &quot;5.4.2-SNAPSHOT&quot;</pre></div></section><section>
<h3><a name="Leiningen"></a>Leiningen</h3><a name="Leiningen"></a>
<div>
<pre>[org.apache.shardingsphere/shardingsphere-infra-database-oracle &quot;5.4.2-SNAPSHOT&quot;]</pre></div></section></section>
      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">
        Copyright &#169;      2024<a href="https://www.apache.org/">The Apache Software Foundation</a>.
.      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
