305

我想将 oracle jdbc 驱动程序作为依赖项(运行时范围)添加到我的项目中 - ojdbc14。在 MVNrepository 站点中,放入 POM 的依赖项是:

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc14</artifactId>
    <version>10.2.0.3.0</version>
</dependency>

当然这不起作用,因为它不在 maven 使用的中央存储库中。2个问题:

  1. 如何找到包含此工件的存储库(如果有)?

  2. 如何添加它以便 Maven 使用它?

4

21 回答 21

425

如何找到包含此工件的存储库(如果有)?

不幸的是,由于二进制许可,没有带有 Oracle Driver JAR 的公共存储库。这发生在许多依赖项上,但不是 Maven 的错。如果您碰巧找到包含 JAR 的公共存储库,则可以确定这是非法的。

如何添加它以便 Maven 使用它?

一些由于许可证原因无法添加的 JAR在Maven Central repo中有一个pom条目。只需检查一下,它包含供应商的首选 Maven 信息:

<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>

...以及下载文件的 URL,在这种情况下是 http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html

下载 JAR 后,只需将其添加到您的计算机存储库(注意我从 POM 中提取了 groupId、artifactId 和版本):

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 \
     -Dversion=10.2.0.3.0 -Dpackaging=jar -Dfile=ojdbc.jar -DgeneratePom=true

生成 POM 的最后一个参数将使您免于 pom.xml 警告

如果您的团队有本地 Maven 存储库,则本指南可能有助于将 JAR 上传到那里。

于 2009-07-02T15:12:08.810 回答
52

无论出于何种原因,我都无法使上述任何解决方案发挥作用。(还是不行。)

我所做的是将 jar 包含在我的项目 (blech) 中,然后为它创建一个“系统”依赖项,指示 jar 的路径。这可能不是正确的方法,但它确实有效。它消除了团队中其他开发人员(或设置构建服务器的人)将 jar 放入本地存储库的需要。

更新:当我运行 Hibernate Tools 时,这个解决方案对我有用。但是,它似乎不适用于构建 WAR 文件。它不包括目标 WAR 文件中的 ojdbc6.jar 文件。

1) 在项目的根目录中创建一个名为“lib”的目录。

2)在那里复制 ojdbc6.jar 文件(无论 jar 叫什么。)

3)创建一个看起来像这样的依赖项:

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc</artifactId>
    <version>14</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/ojdbc6.jar</systemPath> <!-- must match file name -->
</dependency>

丑陋,但对我有用。

要将文件包含在 war 文件中,请将以下内容添加到您的 pom

<build>
    <finalName>MyAppName</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webResources>
                    <resource>
                        <directory>${basedir}/src/main/java</directory>
                        <targetPath>WEB-INF/classes</targetPath>
                        <includes>
                            <include>**/*.properties</include>
                            <include>**/*.xml</include>
                            <include>**/*.css</include>
                            <include>**/*.html</include>
                        </includes>
                    </resource>
                    <resource>
                        <directory>${basedir}/lib</directory>
                        <targetPath>WEB-INF/lib</targetPath>
                        <includes>
                            <include>**/*.jar</include>
                        </includes>
                    </resource>
                </webResources>
            </configuration>
        </plugin>

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>
于 2012-03-19T23:10:59.130 回答
50

Oracle JDBC 驱动程序现在可在 Oracle Maven 存储库(不在 Central)中使用。

<dependency>
    <groupId>com.oracle.jdbc</groupId>
    <artifactId>ojdbc7</artifactId>
    <version>12.1.0.2</version>
</dependency>

Oracle Maven 存储库需要用户注册。可以在以下位置找到说明:

https://blogs.oracle.com/dev2dev/get-oracle-jdbc-drivers-and-ucp-from-oracle-maven-repository-without-ides

2019-10-03 更新

我注意到 Spring Boot 现在正在使用来自Maven Central的 Oracle JDBC Driver 。

<dependency>
    <groupId>com.oracle.ojdbc</groupId>
    <artifactId>ojdbc10</artifactId>
    <version>19.3.0.0</version>
</dependency>

对于 Gradle 用户,请使用:

implementation 'com.oracle.ojdbc:ojdbc10:19.3.0.0'

无需用户注册。

2020-03-02 更新

Oracle 现在正在 com.oracle.database 组 ID 下发布驱动程序。有关更多信息,请参阅 Anthony Accioly 的回答。谢谢安东尼。

兼容JDK6、JDK7、JDK8的Oracle JDBC Driver

<dependency>
  <groupId>com.oracle.database.jdbc</groupId>
  <artifactId>ojdbc6</artifactId>
  <version>11.2.0.4</version>
</dependency>

兼容JDK8、JDK9、JDK11的Oracle JDBC Driver

<dependency>
  <groupId>com.oracle.database.jdbc</groupId>
  <artifactId>ojdbc8</artifactId>
  <version>19.3.0.0</version>
</dependency>

兼容JDK10和JDK11的Oracle JDBC Driver

<dependency>
  <groupId>com.oracle.database.jdbc</groupId>
  <artifactId>ojdbc10</artifactId>
  <version>19.3.0.0</version>
</dependency>
于 2016-02-16T15:09:28.007 回答
30

下载 jar 并将其放入您的项目src/lib中。现在您可以使用 Maven 安装程序插件。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.3.1</version>
    <executions>
        <execution>
            <id>install-oracle-jdbc</id>
            <goals>
                <goal>install-file</goal>
            </goals>
            <phase>clean</phase>
            <configuration>
                <groupId>com.oracle</groupId>
                <artifactId>ojdbc6</artifactId>
                <version>11.2.0</version>
                <packaging>jar</packaging>
                <generatePom>true</generatePom>
                <createChecksum>true</createChecksum>
                <file>${project.basedir}/src/lib/ojdbc6.jar</file>
            </configuration>
        </execution>
    </executions>
</plugin>

现在您只需执行mvn clean一次,oracle lib 就会安装在您的本地 maven 存储库中。

于 2014-04-05T08:53:54.900 回答
21

Oracle 现在在 maven.oracle.com 上公开了一个 maven 存储库但是您需要经过身份验证。

请参阅https://blogs.oracle.com/WebLogicServer/entry/weblogic_server_and_the_oracle

根据博客文章中的评论,ojdbc 驱动程序应在以下坐标处可用:

<groupId>com.oracle.weblogic</groupId>
 <artifactId>ojdbc7</artifactId>
 <version>12.1.3-0-0</version>
 <packaging>jar</packaging>
于 2015-01-14T12:50:43.147 回答
16

尝试:

<repositories>
    <!-- Repository for ORACLE ojdbc6. -->
    <repository>
        <id>codelds</id>
        <url>https://code.lds.org/nexus/content/groups/main-repo</url>
    </repository>
</repositories>
<dependencies> 
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.3</version>
    </dependency>
</dependencies> 
于 2015-01-04T04:42:56.843 回答
13

1. 如何找到包含此工件的存储库(如果有)?

正如DavidS所评论的那样,我在回答时引用的行不再存在于我链接的当前(在我现在写作时)OTN 许可协议协议中。仅针对旧版本的工件考虑此答案,例如 10.2.0.3.0 等。

所有Oracle 数据库 JDBC 驱动程序均根据OTN 许可协议分发。

如果您阅读 OTN 许可协议,您会发现以下许可条款:

您不得:
...
- 分发程序,除非随附您的应用程序;
...

所以这就是为什么你在任何公共 Maven 存储库中都找不到驱动程序的 jar 的原因,因为它会单独分发,如果发生这种情况将违反许可证。

添加依赖:

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc14</artifactId>
    <version>10.2.0.3.0</version>
</dependency>

(或任何更高版本)使 Maven 下载ojdbc14-10.2.0.3.0.pom唯一,并且在那个 pom 中你可以阅读:

...
<licenses>
    <license>
        <name>Oracle Technology Network Development and Distribution License Terms</name>
        <url>http://www.oracle.com/technology/software/htdocs/distlic.html</url>
    </license>
</licenses>
...

通知您有关 OTN 许可证的信息。

2. 如何添加它以便 Maven 使用它?

为了使上述依赖项起作用,我同意victor hugo的意见,他建议您在这里手动将 jar 安装到本地 Maven 存储库(.m2目录)中,方法是运行:

mvn install:install-file -Dfile={Path_to_your_ojdbc.jar} -DgroupId=com.oracle 
-DartifactId=ojdbc -Dversion=10.2.0.3.0 -Dpackaging=jar

但我想补充一点,上面的许可条款不仅限制了您找不到 JDBC jar 的位置,还限制了您安装它的位置!

实际上,您的本地 Maven 存储库必须是私有的,而不是共享的,因为如果它是共享的,它将是一种 jar 单独分发的分发,即使是对一小群人进入您的局域网也是如此,这代表了一个违反 OTN 许可协议

此外,我认为您应该避免在您的公司存储库管理器(例如ArtifactoryNexus )中将 JDBC jar作为单个工件安装,因为如果安装了它,它仍然会单独分发,即使只分发给您组织中的人员,这代表违反OTN 许可协议

于 2014-05-18T14:48:29.470 回答
12

您可以使用Nexus管理 3rd 方依赖项以及标准 maven 存储库中的依赖项。

于 2011-12-31T20:35:27.657 回答
11

截至今天(2020 年 2 月 27 日),Oracle宣布已在 Maven Central 上以组 id com.oracle.database发布从 11.2.0.4(例如 ojdbc6)到 19.3.0(例如 ojdbc10)的所有 JDBC 客户端库:

例子:

<dependency>
  <groupId>com.oracle.database.jdbc</groupId>
  <artifactId>ojdbc10</artifactId>
  <version>19.3.0.0</version>
</dependency>
于 2020-02-28T12:59:39.530 回答
5

到目前为止,还不能使用 maven 存储库。我使用 ivy 作为依赖管理工具,但也使用 maven2 的 ibiblio 存储库。这适用于常春藤:

<dependency org="oracle" name="ojdbc14" rev="10.2.0.2" conf="*->default"/>

Maven2 的依赖可能是这样的:

<dependency> 
    <groupId>oracle</groupId> 
    <artifactId>ojdbc14</artifactId> 
    <version>10.2.0.2</version> 
</dependency>

请注意,我定义了http://download.java.net/maven/2/http://mirrors.ibiblio.org/pub/mirrors/maven/mule/dependencies/maven2/[organisation]/[module]/[ revision]/[artifact]-[revision].[ext]作为我的 ivy 设置上的外部 maven2 存储库。

于 2011-06-23T07:43:09.430 回答
5

Oracle JDBC 驱动程序现在Maven Central 中可用。链接在这里:

Oracle JDBC 驱动程序 - Maven 中心

Oracle 开发人员文章宣布在 Maven Central 中提供 Oracle JDBC 驱动程序:

Oracle 宣布 - Maven Central 中提供 Oracle JDBC 驱动程序

例子:

<!-- https://mvnrepository.com/artifact/com.oracle.jdbc/ojdbc10 -->
<dependency>
   <groupId>com.oracle.database.jdbc</groupId>
   <artifactId>ojdbc10</artifactId>
   <version>19.3.0.0</version>
</dependency>
于 2019-10-18T13:26:47.497 回答
2

大家好消息!最后我们可以使用Oracle的官方repo: https ://blogs.oracle.com/dev2dev/get-oracle-jdbc-drivers-and-ucp-from-oracle-maven-repository-without-ides

于 2016-02-24T09:32:50.630 回答
0

我在 LGPLv2 下发布开源,即使在与 Oracle 进行了几次电子邮件对话之后,他们也不清楚我是否被允许在我的发行版中发布他们的二进制 JDBC 驱动程序。这个问题与我的许可证是否符合他们的 OTN 条款有关,因此他们建议我不允许运送驱动程序。大概与这部分有关

(b) 向您的客户分发带有您开发的应用程序的程序,前提是每个此类被许可人同意与本协议条款一致的许可条款

因此,即使您设法在您的专有/本地 maven 存储库中合法地发布驱动程序,仍然限制您可以使用该工件做什么。似乎荒谬的是,即使我以二进制形式将他们的驱动程序与完整的 OTN 许可证文件一起提供,我仍然无法使用它,并且必须强制我的用户手动下载 Oracle 驱动程序并放入我的库路径,然后他们才能使用我的软件。

于 2015-05-19T04:23:27.317 回答
0

在我的情况下,它在添加以下版本依赖项(10.2.0.4)后对我有用。添加此版本10.2.0.3.0后,由于 .jar 文件在存储库路径中不可用,它不起作用。

<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4</version>
于 2019-10-07T10:42:30.153 回答
-1

有一个提供 jar 的 repo。在 SBT 中添加类似于以下内容的解析器:“ http://dist.codehaus.org/mule/dependencies/maven2 ”中的“oracle driver repo”

和一个依赖: "oracle" % "ojdbc14" % "10.2.0.2"

你可以用 maven 做同样的事情。pom.xml 和 jar 可用(http://dist.codehaus.org/mule/dependencies/maven2/oracle/ojdbc14/10.2.0.2/)。

于 2013-09-05T20:48:10.567 回答
-1

如果您使用的是 Netbeans,请转到 Dependencies 并手动安装工件。找到您下载的 .jar 文件并完成。干净的构建将解决任何问题。

于 2015-02-04T11:13:55.230 回答
-1

您可以在此处找到在 Maven 项目上使用 Oracle JDBC 驱动程序的 Github 简单示例项目。

您可以找到有关持续集成的所有说明 + 示例并在 Travis-CI 上运行。

演示

pom.xml

<properties>
    <oracle.driver.version>12.2.0.1</oracle.driver.version>
</properties>

<repositories>
    <repository>
        <id>maven.oracle.com</id>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <url>https://maven.oracle.com</url>
        <layout>default</layout>
    </repository>
</repositories>

<pluginRepositories>
    <pluginRepository>
        <id>maven.oracle.com</id>
        <url>https://maven.oracle.com</url>
    </pluginRepository>
</pluginRepositories>

<dependencies>
    <dependency>
        <groupId>com.oracle.jdbc</groupId>
        <artifactId>ojdbc8</artifactId>
        <version>${oracle.driver.version}</version>
    </dependency>
</dependencies>

mvnsettings.xml

<settings>
    <servers>
        <server>
            <id>maven.oracle.com</id>
            <username>${OTN_USERNAME}</username>
            <password>${OTN_PASSWORD}</password>
            <configuration>
                <basicAuthScope>
                    <host>ANY</host>
                    <port>ANY</port>
                    <realm>OAM 11g</realm>
                </basicAuthScope>
                <httpConfiguration>
                    <all>
                        <params>
                            <property>
                                <name>http.protocol.allow-circular-redirects</name>
                                <value>%b,true</value>
                            </property>
                        </params>
                    </all>
                </httpConfiguration>
            </configuration>
        </server>
    </servers>
</settings>

如何在本地环境中使用

${OTN_USERNAME}通过您在 test/mvnsettings.xml 文件中的 Oracle 登录名进行更改

${OTN_PASSWORD}通过 test/mvnsettings.xml 文件中的 Oracle 密码更改

mvn clean install --settings test/mvnsettings.xml
于 2018-10-03T08:56:35.207 回答
-1

对于依赖

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc7</artifactId>
    <version>12.1.0.2</version>
</dependency>

尝试

<repository>
    <id>mvnrepository</id>
    <url>http://nexus.saas.hand-china.com/content/repositories/rdc</url>
</repository>
于 2019-05-16T09:10:36.713 回答
-1

请尝试以下:

<dependency>
    <groupId>com.oracle.ojdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>19.3.0.0</version>
</dependency>
于 2019-10-24T03:42:18.023 回答
-1

这对我来说就像魅力一样。我经历了多种方式,但这对我有所帮助。确保您遵循每个步骤并将XML 文件命名为完全相同

https://blogs.oracle.com/dev2dev/get-oracle-jdbc-drivers-and-ucp-from-oracle-maven-repository-without-ides

这个过程有点乏味,但它确实有效。

于 2019-10-24T14:29:25.810 回答
-3

解决了

  • 请进行以下设置以解决错误

需要启用此存储库以查找 Oracle 10.0.3.0 依赖项(此设置需要在 Buildconfig.groovy grails.project.dependency.resolver = "ivy" // 或 ivy 中完成

还使用以下设置进行编译时 Oracle 驱动程序下载

运行时“com.oracle:ojdbc:10.2.0.3.0”

这应该可以解决您找不到适用于 grails 应用程序的 Oracle 驱动程序的问题


于 2014-06-10T01:12:40.853 回答