我想将 oracle jdbc 驱动程序作为依赖项(运行时范围)添加到我的项目中 - ojdbc14。在 MVNrepository 站点中,放入 POM 的依赖项是:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>
</dependency>
当然这不起作用,因为它不在 maven 使用的中央存储库中。 2个问题:
如何找到包含此工件的存储库(如果有)?如何添加它以便 Maven 使用它?
如何找到包含此工件的存储库(如果有)?
不幸的是,由于二进制许可,没有带有 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 上传到那里。
Oracle JDBC 驱动程序现在可在 Oracle Maven 存储库(不在 Central)中使用。
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2</version>
</dependency>
Oracle Maven 存储库需要用户注册。可以在以下位置找到说明:
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>
无论出于何种原因,我都无法使上述任何解决方案发挥作用。 (还是不行。)
我所做的是将 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>
下载 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 存储库中。
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>
尝试:
<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>
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 安装在您的公司存储库管理器中(例如 Artifactory 或 Nexus)作为单个工件,因为如果安装了它,它仍然会单独分发,即使如果仅针对您组织中的人员,则表示违反了OTN 许可协议。
您可以使用 Nexus 管理第 3 方依赖项以及标准 maven 存储库中的依赖项。
截至今天(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>
到目前为止,还不能使用 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 存储库。
http://maven.ibiblio.org/maven/oracle
也没有 http://maven.ibiblio.org/maven/com.oracle
。
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>
大家好消息!最后我们可以使用Oracle的官方repo:https://blogs.oracle.com/dev2dev/get-oracle-jdbc-drivers-and-ucp-from-oracle-maven-repository-without-ides
我在 LGPLv2 下发布开源,即使在与 Oracle 进行了几次电子邮件对话之后,他们也不清楚我是否被允许在我的发行版中发布他们的二进制 JDBC 驱动程序。这个问题与我的许可证是否符合他们的 OTN 条款有关,因此他们建议我不允许运送驱动程序。大概与这部分有关
(b) 向您的客户分发带有您开发的应用程序的程序,前提是每个此类被许可人同意与本协议条款一致的许可条款
因此,即使您设法在您的专有/本地 maven 存储库中合法地发布驱动程序,仍然限制您可以使用该工件做什么。似乎很荒谬的是,即使我将他们的驱动程序与完整的 OTN 许可证文件一起以二进制形式提供,我仍然无法使用它,并且必须强制我的用户手动下载 Oracle 驱动程序并放入我的库路径,然后他们才能使用我的软件。
在我的情况下,它在添加以下版本依赖项(10.2.0.4)后对我有用。添加此版本 10.2.0.3.0 后,由于 .jar 文件在存储库路径中不可用,它不起作用。
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4</version>
有一个提供 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/)。
如果您使用的是 Netbeans,请转到 Dependencies 并手动安装工件。找到您下载的 .jar 文件并完成。干净的构建将解决任何问题。
请尝试以下:
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
这对我来说就像魅力一样。我经历了多种方式,但这对我有所帮助。确保您遵循每个步骤并将 XML 文件命名为完全相同。
这个过程有点乏味,但它确实有效。
您可以在 Maven 项目 here 上找到一个使用 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>
如何在本地环境中使用
通过您在 test/mvnsettings.xml 文件中的 Oracle 登录名更改 ${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>
解决了
请进行以下设置以解决错误
需要启用此存储库以查找 Oracle 10.0.3.0 依赖项(此设置需要在 Buildconfig.groovy grails.project.dependency.resolver = "ivy" // 或 ivy 中完成
还使用以下设置进行编译时 Oracle 驱动程序下载
运行时“com.oracle:ojdbc:10.2.0.3.0”
这应该可以解决您找不到适用于 grails 应用程序的 Oracle 驱动程序的问题
不定期副业成功案例分享