在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使用的中央存储库中。 两个问题:< / p >

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

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

447028 次浏览

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

不幸的是,由于二进制许可证,Oracle驱动JAR没有公共存储库。这发生在许多依赖关系中,但不是Maven的错。如果您碰巧发现一个包含JAR的公共存储库,您可以确定它是非法的。

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

一些由于许可原因而不能添加的jar在Maven中央回购. jar中有一个砰的一声条目。检查一下,它包含了供应商首选的Maven信息:

<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>
< p >…以及下载文件的URL,在这种情况下就是 http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html . < / p >

一旦你下载了JAR,只需将它添加到你的计算机存储库(注意我从POM中提取了groupId, artifactId和version):

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。

到目前为止,还不能使用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/(组织)/(模块)/(修订)/(工件)——(修订)。(ext)定义为外部maven2回购。

你可以使用联系来管理第三方依赖项以及标准maven存储库中的依赖项。

无论出于何种原因,我都无法让上述任何解决方案发挥作用。(仍然不能)。

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

更新:当我运行Hibernate工具时,这个解决方案适用于我。但是,它似乎不能用于构建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>

有一个repo提供jar。在SBT中添加一个类似这样的解析器: "oracle driver repo" at "http://dist.codehaus.org/mule/dependencies/maven2"

.

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

.

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

下载这个罐子并把它放在你的项目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存储库中。

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

由于大卫斯评论了我回答的时候引用的行不再存在于当前(在我现在写作的时候)我链接的OTN许可协议协议。这个答案只适用于工件的旧版本,比如10.2.0.3.0等等。

所有Oracle数据库JDBC驱动程序分布在OTN许可协议下。

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

你不能:
< br >… -除非随应用程序一起分发程序;
…< / p >

所以这就是为什么你不能在任何公共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使用它?

为了使上面的依赖工作,我同意维克多。雨果,他建议你在这里手动安装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存储库必须是私有的而不是共享的,因为如果它是共享的,它将是一种单独分发罐子的分布,即使是分配给你的局域网中的一小群人,这代表了违反OTN许可协议

此外,我认为你应该避免在公司的存储库管理器中安装JDBC jar吗(如Artifactory联系)是一个单独的工件,因为如果它被安装,它仍然是单独分发的,即使只是给你组织中的人,这代表了一个违反OTN许可协议

解决了

  • 请执行以下设置以解决错误
这个存储库需要为查找Oracle 10.0.3.0依赖项而启用(这个设置需要在Buildconfig.groovy中完成 Grails.project.dependency.resolver = "ivy" //或ivy

在编译时下载Oracle驱动程序时也使用以下设置

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

这将解决您找不到grails应用程序的Oracle驱动程序的问题


试一试:

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

如果你正在使用Netbeans,转到Dependencies并手动安装artifact。找到你下载的.jar文件就完成了。清洁构建将解决任何问题。

我在LGPLv2下发布开源软件,甚至在与Oracle进行了几次电子邮件交谈之后,他们仍然不清楚我是否可以在我的发行版中发布他们的二进制JDBC驱动程序。这个问题涉及到我的执照是否与OTN的条款兼容,所以他们建议我不允许运送司机。大概和这部分有关

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

因此,即使您设法将驱动程序合法地发布在您的独占/本地maven存储库中,仍然存在允许您使用该工件的限制。看起来很荒谬,即使我以二进制形式提供了他们的驱动程序以及完整的OTN许可文件,我仍然不能使用它,必须强制我的用户手动下载Oracle驱动程序并在他们可以使用我的软件之前放入我的库路径中。

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中央中的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的回答。谢谢安东尼。

Oracle JDBC驱动兼容JDK6、JDK7和JDK8

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

Oracle JDBC驱动兼容JDK8、JDK9和JDK11

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

Oracle JDBC驱动兼容JDK10和JDK11

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

你可以在Github上找到一个简单的示例项目,用于在Maven项目这里<强> < / >强上使用Oracle JDBC驱动程序。

您可以找到持续集成的所有解释+一个示例,并在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>

如何在当地环境中使用

通过Oracle登录test/mvnsettings.xml文件更改${OTN_USERNAME}

在test/mvnsettings.xml文件中用你的Oracle密码修改${OTN_PASSWORD}

mvn clean install --settings test/mvnsettings.xml

的依赖关系

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

在我的情况下,在添加下面的版本依赖项(10.2.0.4)后,它就可以工作了。添加此版本10.2.0.3.0后,由于.jar文件无法在存储库路径中使用,因此无法工作。

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

Oracle JDBC驱动程序现在Maven中央中可用。 下面是链接:

Oracle JDBC Drivers - Maven Central

Oracle开发人员的文章宣布了Oracle JDBC驱动程序在Maven Central的可用性:

Oracle宣布- Oracle JDBC驱动程序在Maven中心可用

例子:

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

请尝试以下内容:

<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
这对我来说就像魅力。我尝试了很多方法,但这个方法帮了我。 确保你遵循每一步和命名完全相同的XML文件。< / p >

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

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

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

例子:

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