ChatGPT解决这个技术问题 Extra ChatGPT

在 Maven 存储库中查找 Oracle JDBC 驱动程序

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

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

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

如何找到包含此工件的存储库(如果有)?如何添加它以便 Maven 使用它?


v
victor hugo

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

不幸的是,由于二进制许可,没有带有 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 存储库,this guide 可能有助于将 JAR 上传到那里。


@Victor - 我在哪里可以找到这些行?在 settings.xml 中?
这些不是 settings.xml 中的行,而是一个命令,一旦您拥有 JAR,该命令会将其添加到您的本地存储库
对于 OJDBC6: 1. mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar -Dfile=ojdbc6.jar -DgeneratePom=true 2. 将此添加到 pom.xml: com.oracle ojdbc6 11.2.0.3
我徘徊为什么甲骨文如此丑陋以至于它不关心它拥有的所有公众判断。即使在这些小事情上也很糟糕,比如他们自己的免费图书馆的公共可用性。
@AmanicA 根据 stackoverflow.com/a/27943380/7677308,Oracle 现在托管这样一个存储库
B
Bienvenido David

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 驱动程序。

<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>

这应该是首选方式。
R
ROMANIA_engineer

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

我所做的是将 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>

我实际上喜欢这个解决方案,因为它不需要设置 nexus,在一个项目中通常只有 1 或 2 个这样的 jar,并且它简化了其他开发人员在项目上的设置,因为他们不必更新他们的本地 .m2 环境. (甲骨文是这方面的主要候选人)。此外,如果您使用新的 oracle jar 更新源代码库,所有开发人员都会在下一次 pull 时获得它。
添加了有关如何将 jar 文件添加到 WAR 文件的信息
@Marvo,我尝试了很多解决方案,这是最好的一个,非常感谢
S
Stephan

下载 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 库已安装在您的本地 maven 存储库中。


非常有用的替代品!
S
Sebastien

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>

这确实有效。这有点麻烦。您必须确保获得正确的工件,创建一个 Oracle 帐户,向 settings.xml 和您的 pom.xml 文件添加一些内容,并将该帐户的用户名和密码添加到 settings.xml。 Oracle 需要修复他们的许可,因为这仍然是一个 PITA。
需要身份验证才能获得 Maven 工件听起来很荒谬。
如果您出于某种原因必须使用 ojdbc6(即您卡在 Java 6 上),则将 artifactId 更改为 ojdbc6 并将版本更改为 12.1.2-0-0。
我正在尝试为 java 6 找到 11g 版本(11.2.0.4)...有人找到了吗?
更新 : 搞定了:对于较旧的 jdbc 驱动程序,您还必须更改 groupId:mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get -DrepoUrl=maven.oracle.com -Dartifact= com.oracle.jdbc:ojdbc6:11.2.0.4
R
ROMANIA_engineer

尝试:

<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> 

除非这违反了 Oracle 许可。
许可证的暴力,但有效。我将它用于教育目的(不在生产中)。它还包含 12c 驱动程序 com.oracle ojdbc7 12.1.0.2
除了许可问题,您不应该在 pom.xml 中添加未知存储库。这会带来安全风险,也可能会威胁到您的构建。您对耶稣基督后期圣徒教会的资料库有多少信任?他们提供什么保证来保证存储库是可靠的、安全的和安全的,并且他们不会弄乱它?如果他们被黑客入侵并发布恶意版本的 ojdbc 驱动程序或您的任何其他依赖项,会发生什么?
t
taringamberini

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

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

所有 Oracle Database JDBC Drivers 都分布在 OTN License Agreement 下。

如果您阅读 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 的意见,他建议您 here 通过运行以下命令手动将 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 许可协议。

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


值得注意的是,您引用的行不再出现在您链接的协议中。我认为,剩下的最接近的一行是,“我们授予您非独占、不可转让的权利,以复制和分发未经修改的程序和程序文档,作为您的应用程序的一部分并包含在您的应用程序中,该应用程序旨在与相关产品(如果有)互操作,但前提是您不会因使用程序而向您的最终用户收取任何额外费用”,正如您所见,与重新分发的细节相比,这更关注付款。
M
Michael Munsey

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


在这种情况下,nexus 将如何提供帮助?它将从哪里下载工件?
答案不完整,但我认为@Michael Munsey 说要创建一个内部/企业存储库以供下载。
是的。设置 Nexus,然后手动下载 jar 并将它们放入 Nexus,以便后续的 maven 构建可以从您的 Nexus 实例中提取它。
@MichaelMunsey 一般来说,建议使用像 ArtifactoryNexus 这样的存储库管理器会是一个很好的答案,但在 Oracle JDBC 数据库驱动程序的特定情况下,它不是一个好方法,因为即使它使事情正常运行,它很遗憾,由于 this license term violation,您会遇到麻烦。
A
Anthony Accioly

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

例子:

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

B
Betlista

到目前为止,还不能使用 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>

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


这是一个很好的答案 - 您只需将 repo: mirrors.ibiblio.org/pub/mirrors/maven/mule/dependencies/maven2 添加到您的 pom.xml 即可。
它可能有效,但它合法吗?正如此处的其他答案之一所解释的,Oracle 不允许驱动程序由除他们之外的任何人分发,并且他们不提供 Maven 存储库。如果您使用此解决方案,有时驱动程序可能会在您最不期望的时候从存储库中删除。
@Grouchal 这个答案使事情顺利进行,但不幸的是,由于this license term violation,您会遇到麻烦。
@Grouchal ...没有 http://maven.ibiblio.org/maven/oracle 也没有 http://maven.ibiblio.org/maven/com.oracle
A
Alboz

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

Oracle JDBC Drivers - Maven Central

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

Oracle announcing - Oracle JDBC drivers available in Maven Central

例子:

<!-- 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>

N
Nirmala

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


好消息,但安全设置太复杂了。像我们在 1999 年所做的那样,在“lib”文件夹中下载 JAR 会更容易。
有用!安全设置并没有那么复杂并且有据可查,您只需执行一次。当然,您必须在某处硬编码您的(加密)密码这一事实很痛苦,我也质疑 Oracle 决定“保护”对其“公共”存储库的访问,从开发人员的角度来看,这完全没有意义。
C
Craig

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

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

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


a
anand krish

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

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

y
yǝsʞǝla

有一个提供 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/)。


小心,因为这个 pom http://dist.codehaus.org/mule/dependencies/maven2/oracle/ojdbc14/10.2.0.2/ojdbc14-10.2.0.2.pom 没有许可证定义,所以我认为它不是由工件所有者上传的。这个答案使事情正常进行,但不幸的是,由于this license term violation,您会遇到麻烦。
Z
Zafrullah Syed

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


S
Sunny

请尝试以下:

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

S
Sudoss

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

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

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


S
Stéphane GRILLON

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

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

DEMO

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>

如何在本地环境中使用

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

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

mvn clean install --settings test/mvnsettings.xml

您的个人资料表明您与您链接的网站相关联。在 Stack Exchange/Stack Overflow 上链接到您所属的东西(例如产品或网站)而不透露它是您的被视为垃圾邮件。请参阅:What signifies "Good" self promotion?some tips and advice about self-promotionWhat is the exact definition of "spam" for Stack Overflow?What makes something spam
塞缪尔(网站版主)正在使用罐头评论来警告您自我推销,这并没有错。
@Jean-FrançoisFabre,这不是自我推销,这是我专门为回答问题而制作的示例项目。在很多答案中都有一个完整示例的链接,尤其是在 javascript/html/css 中指向 codepen.io
好吧,然后看Samuel的消息,你会看到你只需要透露你的隶属关系,就可以了。
b
bosco1

对于依赖

<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>

M
Makarand

解决了

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

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

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

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

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