簡體   English   中英

在 Maven 存儲庫中查找 Oracle JDBC 驅動程序

[英]Find Oracle JDBC driver in Maven repository

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

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

不幸的是,由於二進制許可證,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 和 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 上傳到那里。

無論出於何種原因,我都無法使上述任何解決方案起作用。 (還是不能。)

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

Oracle JDBC 驅動程序現在在 Oracle Maven Repository 中可用(不在 Central 中)。

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

Oracle Maven Repository 需要用戶注冊。 說明可以在以下位置找到:

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 的回答。 謝謝安東尼。

Oracle JDBC Driver 兼容 JDK6、JDK7 和 JDK8

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

Oracle JDBC Driver 兼容 JDK8、JDK9 和 JDK11

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

下載 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 數據庫 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 許可協議

您可以使用Nexus來管理 3rd 方依賴項以及標准 maven 存儲庫中的依賴項。

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

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>

到目前為止,無法使用 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 存儲庫。

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

大家好消息! 最后我們可以使用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,請轉到依賴項並手動安裝工件。 找到您下載的 .jar 文件並完成。 干凈的構建將解決任何問題。

您可以在此處找到在 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>

如何在本地環境中使用

通過您在 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>

請嘗試以下:

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

這對我來說就像魅力一樣。 我經歷了多種方式,但這對我有幫助。 確保您遵循每個步驟並完全相同地命名 XML 文件

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

這個過程有點乏味,但它確實有效。

解決了

  • 請執行以下設置以解決錯誤

需要啟用此存儲庫以查找 Oracle 10.0.3.0 依賴項(此設置需要在 Buildconfig.groovy grails.project.dependency.resolver = "ivy" // 或 ivy

還使用以下設置進行編譯時 Oracle 驅動程序下載

運行時“com.oracle:ojdbc:10.2.0.3.0”

這應該可以解決您找不到 grails 應用程序的 Oracle 驅動程序的問題


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM