Найти драйвер Oracle JDBC в репозитории Maven

Я хочу добавить драйвер 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 использовал его?

16 ответов

Решение

Как мне найти хранилище (если есть), содержащее этот артефакт?

К сожалению, из-за бинарной лицензии нет общедоступного репозитория с Oracle Driver JAR. Это происходит со многими зависимостями, но это не вина Maven. Если вам случится найти общедоступный репозиторий, содержащий JAR, вы можете быть уверены, что это незаконно.

Как мне добавить его, чтобы Maven использовал его?

Некоторые JAR-файлы, которые не могут быть добавлены по лицензионным причинам, имеют запись pom в репозитории Maven Central. Просто проверьте, он содержит информацию о продавце, которую предпочитает 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, просто добавьте его в репозиторий вашего компьютера с помощью (обратите внимание, что я извлек groupId, artifactId и version из POM):

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 туда.

Драйвер JDBC для Oracle теперь доступен в репозитории 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

По какой-то причине я не смог заставить работать ни одно из перечисленных выше решений. (Все еще не могу.)

Вместо этого я включил банку в свой проект (blech), а затем создал для нее "системную" зависимость, которая указывает путь к банке. Это, вероятно, не правильный способ сделать это, но он работает. И это устраняет необходимость для других разработчиков в команде (или парня, настраивающего сервер сборки) помещать банку в свои локальные репозитории.

ОБНОВЛЕНИЕ: Это решение работает для меня, когда я запускаю Hibernate Tools. Однако он НЕ работает для создания файла WAR. Он не включает файл ojdbc6.jar в целевой файл WAR.

1) Создайте каталог с именем "lib" в корне вашего проекта.

2) Скопируйте туда файл ojdbc6.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>

Скачайте банку и поместите ее в свой проект 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 один раз и оракул lib установлен в вашем локальном хранилище maven.

Oracle теперь предоставляет хранилище maven на maven.oracle.com. Однако вам необходимо пройти аутентификацию.

См. 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. Как мне найти хранилище (если есть), содержащее этот артефакт?

Все драйверы Oracle Database JDBC распространяются в соответствии с лицензионным соглашением OTN.

Если вы прочитали лицензионное соглашение OTN, вы найдете этот срок лицензии:

Вы не можете:
...
- распространять программы, если они не сопровождаются вашими приложениями;
...

вот почему вы не можете найти флягу водителя в любом общедоступном репозитории Maven, потому что он будет распространяться один, и если это произойдет, это будет нарушением лицензии.

Добавление зависимости:

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

(или любая более поздняя версия) заставляет Maven загружать ojdbc14-10.2.0.3.0.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, я согласен с 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.

Более того, я думаю, что вам следует избегать установки jar JDBC в менеджере хранилища вашей корпорации (например, в Artifactory или Nexus) как единый артефакт, потому что, если он был установлен, он все равно будет распространяться один, даже если это будет происходить только для людей в вашей организации, и это представляет нарушение лицензионного соглашения OTN.

Вы можете использовать Nexus для управления сторонними зависимостями, а также зависимостями в стандартных репозиториях maven.

На сегодняшний день (27 февраля 2020 г.) Oracle объявила, что она опубликовала все клиентские библиотеки JDBC от версии 11.2.0.4 (например, ojdbc6) до 19.3.0 (например, ojdbc10) на Maven Central под идентификатором группы com.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>

Обратите внимание, что я определяю http://download.java.net/maven/2/ и http://mirrors.ibiblio.org/pub/mirrors/maven/mule/dependencies/maven2/ качестве внешних репозиториев maven2 в моих настройках ivy.

Драйверы Oracle JDBC теперь доступны в Maven Central. Вот ссылка:

Драйверы Oracle JDBC - Maven Central

Статья разработчиков Oracle, в которой объявляется о доступности драйверов Oracle JDBC в Maven Central:

Объявление Oracle - драйверы Oracle JDBC доступны в 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: https://blogs.oracle.com/dev2dev/get-oracle-jdbc-drivers-and-ucp-from-oracle-maven-repository-without-ides

Некоторые продукты Oracle поддерживают публикацию артефактов maven в локальном хранилище. В продуктах есть каталог плагинов / 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>

Я отправляю OpenSource под 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>

Если вы используете NetBeans, перейдите в Зависимости и установите артефакт вручную. Найдите загруженный файл.jar и все готово. Чистая сборка решит любые проблемы.

Для зависимости

<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

Процесс немного утомительный, но да, он работает.

Вы можете найти простой пример проекта Github для использования драйвера JDBC Oracle в Maven Project здесь.

Вы можете найти все объяснения для вашей непрерывной интеграции + образец и работать на Travis-CI.

DEMO

Существует один репо, который обеспечивает банку. В SBT добавьте распознаватель, похожий на этот: "oracle driver repo" на " http://dist.codehaus.org/mule/dependencies/maven2"

и зависимость: "оракул" % "ojdbc14" % "10.2.0.2"

Вы можете сделать то же самое с Maven. Доступны pom.xml и jar ( http://dist.codehaus.org/mule/dependencies/maven2/oracle/ojdbc14/10.2.0.2/).

РЕШИТЬ

  • Пожалуйста, выполните следующие настройки, чтобы устранить ошибку

Этот репозиторий должен быть включен для поиска зависимостей Oracle 10.0.3.0 (этот параметр нужно сделать в Buildconfig.groovy grails.project.dependency.resolver = "ivy" // или ivy

Также используйте следующие настройки для времени компиляции драйвера Oracle

время выполнения "com.oracle:ojdbc:10.2.0.3.0"

Это должно решить вашу проблему, так как вы не можете найти драйвер Oracle для приложения grails


Другие вопросы по тегам