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


292

我想将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使用它?



1
ojdbc6在公共Maven仓库:stackoverflow.com/questions/9898499/...
Vadzim

Answers:


412

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

不幸的是,由于二进制许可证,Oracle Driver JAR没有公共存储库。这种情况有很多依赖性,但这不是Maven的错。如果您碰巧找到了一个包含JAR的公共存储库,则可以确定这是非法的。

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

一些由于许可证原因而无法添加的JAR 在Maven Central仓库中有一个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上载到此处很有帮助。


@Victor-我在哪里找到这些行?在settings.xml中?
Dejell

1
这些都不是在settings.xml的线,但一个命令,一旦你的JAR这个命令将它添加到你的本地仓库
维克多·雨果

15
对于OJDBC6:1. mvn install:安装文件-DgroupId = com.oracle -DartifactId = ojdbc6 -Dversion = 11.2.0.3 -Dpackaging = jar -Dfile = ojdbc6.jar -DgeneratePom = true 2.将其添加到pom.xml: <dependency> <groupId> com.oracle </ groupId> <artifactId> ojdbc6 </ artifactId> <version> 11.2.0.3 </ version> </ dependency>
oskarae 2011年

11
我一直在徘徊,为什么Oracle如此丑陋以至于它并不关心它拥有的所有公共判断。即使在这些小事情(例如其自己的免费库的公共可用性)中,这也是不好的。
Askar Kalykov 2014年

7
@AmanicA根据stackoverflow.com/a/27943380/7677308,Oracle现在托管了这样的存储库
SilverNak

51

无论出于何种原因,我都无法获得上述任何解决方案。(仍然不能。)

相反,我要做的是将jar包含在我的项目中(崩溃),然后为其创建一个“系统”依赖关系,以指示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>

8
我实际上很喜欢这种解决方案,因为它不需要设置关系,在一个项目中通常只有1或2个这样的jar,它简化了其他开发人员在项目上的设置,因为他们不必更新其本地.m2 env 。(甲骨文为此的主要候选人)。另外,如果您使用新的Oracle jar更新源存储库,则所有开发人员都将在下一次下载时获取它。
Q锅炉

添加了有关如何将jar文件添加到WAR文件的信息
ojblass 2014年


1
@Marvo,我尝试了许多解决方案,这是最好的解决方案,非常感谢
Mahmoud Saleh

34

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

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

与JDK8,JDK9和JDK11兼容的Oracle JDBC驱动程序

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

与JDK10和JDK11兼容的Oracle JDBC驱动程序

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

这应该是首选方式。
Ashish

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存储库中。


9
非常有用的替代品!
Rakesh Waghela 2014年

22

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>

7
这确实有效。有点麻烦。您必须确保获得正确的工件,创建一个Oracle帐户,将一些内容添加到settings.xml和pom.xml文件中,并将该帐户的用户名和密码添加到settings.xml中。Oracle需要修复其许可,因为它仍然是PITA。
ggb667

12
需要认证才能使Maven工件听起来很荒谬。
拉斐尔·苏亚雷斯-tuelho,2015年

3
如果由于某种原因必须使用ojdbc6(即您被困在Java 6上),则将artifactId更改为ojdbc6 并将版本更改为12.1.2-0-0。
dcsohl 2015年

我正在尝试找到适用于Java 6的11g版本(11.2.0.4)...是否找到任何人?
jpfreire

2
更新:钉了它:对于较旧的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
jpfreire

17

尝试:

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

14
除非这违反了Oracle许可证。
Ben L.

3
违反许可证,但可以。我将其用于教育目的(不在生产​​中)。它还具有12c驱动程序<dependency> <groupId> com.oracle </ groupId> <artifactId> ojdbc7 </ artifactId> <version> 12.1.0.2 </ version> </ dependency>
Svetlin Nakov

4
除了许可问题之外,您不应该在pom中添加未知的存储库。这带来了安全风险,也可能威胁到您的构建。您可以从耶稣基督后期圣徒教会获得多少信任?他们提供什么保证来确保存储库可靠,安全,又不会混乱?如果他们被黑客入侵并发布了ojdbc驱动程序的恶意版本或您的任何其他依赖项,该怎么办?
Didier L

14

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许可协议

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


1
值得注意的是,您引用的行不再存在于您链接的协议中。我认为,剩下的最接近的行是:“我们授予您复制和分发未经修改的程序和程序文档的非排他性,不可转让的权利,作为您与相关产品(如果有)互操作的一部分并包含在您的应用程序中,您不向最终用户收取使用程序的任何额外费用”,这是您所看到的,与付款有关,而不是与重新分发有关。
DavidS

13

您可以使用Nexus管理第三方依赖关系以及标准Maven存储库中的依赖关系。


4
在这种情况下,联系有什么帮助?它将从哪里下载工件?
ziggy 2012年

4
答案是不完整的,但我认为 @Michael Munsey表示要创建一个内部/企业存储库以供下载。
伦道夫2012年

是。设置Nexus,然后手动下载jar并将其放入Nexus,以便后续的Maven构建可以将其从Nexus实例中拉出。
Michael Munsey 2013年

1
@MichaelMunsey通常来说,建议像ArtifactoryNexus这样的存储库管理器是一个不错的选择,但是在Oracle JDBC数据库驱动程序的特定情况下,它不是一个好方法,因为即使使事情正常,它也会使您接触到由于此许可条款的违反而造成的麻烦。
taringamberini 2014年

6

到目前为止,尚无法使用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] / [修订] / [工件]-[修订]。[ext]作为常春藤设置上的外部maven2存储库。


1
这是一个很好的答案-您只需将仓库:mirrors.ibiblio.org/pub/mirrors/maven/mule/dependencies/maven2添加到pom.xml即可。
Grouchal 2012年

7
它可能有效,但是合法吗?如此处其他答案之一所述,Oracle不允许任何人分发驱动程序,但他们不提供驱动程序,并且他们不提供Maven存储库。如果使用此解决方案,有时您可能最不希望从存储库中删除驱动程序。
LS 2012年

1
@Grouchal这个答案可以解决问题,但不幸的是,由于违反此许可条款,您将面临麻烦。
taringamberini 2014年

@Grouchal ...没有http://maven.ibiblio.org/maven/oracle也没有http://maven.ibiblio.org/maven/com.oracle
大卫

6

截至今天(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>

4

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

Oracle JDBC驱动程序-Maven Central

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>

3

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


4
好消息,但是安全设置太复杂了。像在1999
。– Svetlin Nakov

有用!安全设置并不那么复杂,并且有据可查,您只需要执行一次。当然,必须在某个地方对您的(加密的)密码进行硬编码确实很痛苦,我也质疑Oracle决定“保护”对其“公共”存储库的访问权,从开发人员的角度来看,这完全没有意义。
Pierluigi Vernetto

2

一些Oracle产品支持将Maven工件发布到本地存储库。这些产品有一个plugin / maven目录,其中包含描述在哪里找到这些工件以及在哪里存储它们的描述。Oracle提供了一个插件,可以实际执行上传。

请参阅:http : //docs.oracle.com/middleware/1212/core/MAVEN/config_maven.htm

可以以这种方式发布OJDBC的产品之一是WLS,但是它使用了非常奇怪的坐标:

<groupId>com.oracle.weblogic</groupId>
<artifactId>ojdbc6</artifactId>
<version>12.1.2-0-0</version>

...和manwhile回购也是公众提供:blogs.oracle.com/WebLogicServer/entry/...
eckes

1

我在LGPLv2下发布了开放源代码,即使在与Oracle进行了数次电子邮件交谈之后,他们仍然不清楚我是否可以随自己的发行版一起发布其二进制JDBC驱动程序。问题涉及我的许可证是否与他们的OTN条款兼容,因此他们建议我不允许运送驾驶员。大概与此部分有关

(b)将程序与您开发的应用程序一起分发给客户,但前提是每个这样的被许可方同意遵守与本协议条款一致的许可条款

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


0

有一个提供该jar的仓库。在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没有许可证定义,所以我认为它不是上载的由工件所有者。这个答案使事情奏效,但不幸的是,由于违反此许可条款,您将面临麻烦。
taringamberini 2014年

Downvoter,您是生我的气还是生Oracle的气?:)请解释一下您的不赞成票,以便其他用户知道此答案有什么问题。
yǝsʞǝla

0

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


0

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

您可以找到连续集成的所有示例和示例,然后在Travis-CI上运行。

演示


1
欢迎使用指向解决方案的链接,但请确保没有该链接的情况下,您的回答是有用的:在链接周围添加上下文,以便您的其他用户可以了解它的含义和含义,然后引用您所使用页面中最相关的部分如果目标页面不可用,请重新链接。只是链接的答案可能会被删除。
塞缪尔·柳

1
您的个人资料表明您与您链接到的网站相关联。在不公开属于您的附属产品(例如产品或网站)的情况下,链接到您所附属的产品(例如产品或网站)会被视为Stack Exchange / Stack Overflow上的垃圾邮件。请参阅:什么表示“良好”的自我提升?自我推销一些提示和建议什么是“垃圾邮件”的堆栈溢出的确切定义是什么?以及导致垃圾内容的原因
塞缪尔·柳

0

对于依赖

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

0

就我而言,在添加以下版本依赖项(10.2.0.4)后,它对我有用。添加此版本10.2.0.3.0后,由于无法在存储库路径中使用.jar文件,因此无法使用。

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

0

请尝试以下:

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


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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.