[java] Maven 저장소에서 Oracle JDBC 드라이버 찾기

의존성 (런타임 범위)-ojdbc14로 oracle jdbc 드라이버를 프로젝트에 추가하고 싶습니다. MVNrepository 사이트에서 POM에 대한 종속성은 다음과 같습니다.

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

물론 이것은 maven이 사용하는 중앙 저장소에 없기 때문에 작동하지 않습니다. 두 가지 질문 :

  1. 이 이슈가 포함 된 저장소 (있는 경우)는 어떻게 찾습니까?

  2. Maven에서 사용하도록 추가하려면 어떻게합니까?



답변

이 이슈가 포함 된 저장소 (있는 경우)는 어떻게 찾습니까?

불행히도 바이너리 라이센스로 인해 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>

…이 경우 http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html 파일을 다운로드 할 URL
입니다.

JAR을 다운로드하면 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을 업로드하는 데 도움이 될 수 있습니다.


답변

어떤 이유로 든 위의 솔루션을 사용할 수 없었습니다. (아직도 할 수 없습니다.)

대신에 내 프로젝트 (표백제)에 항아리를 포함시킨 다음 항아리에 대한 경로를 나타내는 “시스템”종속성을 작성했습니다. 아마도 올바른 방법은 아니지만 작동합니다. 또한 팀의 다른 개발자 (또는 빌드 서버를 설정하는 사람)가 항아리를 로컬 리포지토리에 넣을 필요가 없습니다.

업데이트 :이 솔루션은 최대 절전 모드 도구를 실행할 때 효과적입니다. 그러나 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 (중앙 아님)에서 사용할 수 있습니다.

<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 업데이트

오라클은 이제 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>


답변

항아리를 다운로드하여 프로젝트에 배치하십시오 src/lib. 이제 maven installer 플러그인을 사용할 수 있습니다.

<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 저장소에 설치됩니다.


답변

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.이 이슈가 포함 된 저장소 (있는 경우)를 어떻게 찾을 수 있습니까?

으로 다비즈는 내가 대답 할 때 인용 라인 I 댓글을 달았습니다 내가 링크 OTN 라이센스 계약의 계약을 (내가 지금 쓰고있는 시점에서) 현재에 더 이상 존재하지 않는다. 이 답변은 10.2.0.3.0 등과 같은 이전 버전의 아티팩트에만 적용하십시오.

모든 Oracle Database JDBC 드라이버OTN 라이센스 계약에 따라 배포됩니다 .

OTN 사용권 계약을 읽은 경우이 사용권 조항이 있습니다.

: 당신은 할 수도

– 응용 프로그램을 동반하지 않는 한 프로그램을 배포;

그렇기 때문에 공용 Maven Repository에서 드라이버의 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 저장소 ( 디렉토리)에 수동으로 설치하도록 제안한 victor hugo에 동의합니다 ..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 라이센스 계약 위반 .

또한 회사 저장소 관리자 (예 : Artifactory 또는 Nexus )에 JDBC jar을 단일 아티팩트로 설치하지 않아야한다고 생각합니다. 설치 된 경우 조직의 사람들에게만 배포 되어도 여전히 단독으로 배포되므로 이것이 나타납니다. OTN 라이센스 계약 위반 .