Oracle DBのjdbcドライバをmavenから利用する。

日本語情報だと、どこからか取ってきたjdbcドライバを自前でローカルリポジトリにインストールしろという記事しか見つからなかったので。

Oracle社はOracle DB用のjdbcドライバを自前のmavenリポジトリでリリースしており、そちらから取得する設定を行うことで、ローカルリポジトリに個別にインストールしなくても使用することが出来ます。

基本的には以下の記事のとおりです。

blogs.oracle.com

記事自体は2016年に公開されたものですが、細かいバージョン等はアップデートされているようで、現時点では以下のバージョンが利用できるとの事。

  • 18.3.0.0
  • 12.2.0.1
  • 12.1.0.2
  • 12.1.0.1
  • 11.2.0.4

まずは、Oracleのアカウントを作成して以下にアクセスし、利用規約に同意する必要があります。

https://www.oracle.com/webapps/maven/register/license.html

%USER_HOME%/.m2/setting.xmlに以下の記述を追加してください。 serverのusernameとpasswordはOracleにアカウントを登録した自分のものを使用する必要があります。

<settings>
         <!-- Oracleのサーバーのプロファイルでの有効化 -->
    <profiles>
        <profile>
            <id>oracle</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <repositories>
                <repository>
                    <id>maven.oracle.com</id>
                    <name>oracle-maven-repo</name>
                    <url>https://maven.oracle.com</url>
                    <layout>default</layout>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </releases>
                </repository>
            </repositories>
        </profile>
    </profiles>
    <!-- Oracleのサーバーの追加 -->
    <servers>
        <server>
            <id>maven.oracle.com</id>
            <username>OracleアカウントのID</username>
            <password>Oracleアカウントのパスワード</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>

この状態で、pom.xmldependencyに以下のように記載すればOKです。atrifactIdやversionについてはサポート情報を参照しつつ適切なものを指定してください。

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

パスワードの暗号化

パスワードを暗号化したい場合は、setting.xmlの隣にsettings-security.xmlを置く必要があります。 以下のコマンドでmaven用のマスターパスワードを暗号化します。

mvn -encrypt-master-password "マスターパスワード"

(例)

$ mvn -encrypt-master-password password
{9w4lYAShAwsHjAeOPalqAanbuKtz+vReNStoIHpd0wc=}

setting-security.xmlの内容としては以下のように記述します。

<settingsSecurity> 
<master>上記のコマンドの出力結果</master> 
</settingsSecurity> 

以下のコマンドを打つことでOracleアカウントのパスワードを暗号化することが出来ます。

mvn -encrypt-password Oracleアカウントのパスワード

(例)

$ mvn -encrypt-password password
{cmpjcpQb1KsH1O6ljNnoidSMmsYshOwW4kF90QFXzd0=}

この出力内容をpasswordのタグの中に記載することでパスワードが暗号化された状態で使用できます。 マスターパスワードが隣に保存されているかぎりあまり意味はないですが、pom.xmlに記載したい場合は意味がある・・・・・はず。