Mavenによるセットアップ
こちらは、dbflute-1.1.x (Java8) のためのドキュメントになっています。
前提条件 ※Java8
前提となる環境
- Java8
- dbflute は Apache Ant を利用するため、Java8 以上の実行環境が必要
- Maven
- コマンドラインで mvn -version が打てる必要あり
- pom.xml
- アプリ用の pom.xml が既に用意されている必要あり
- インターネット
- Maven経由でdbflute Engineをダウンロードするため
もし、複数DB対応をする場合、事前にポイントを抑えておきましょう。
セットアップ手順
1. dbfluteランタイムの設定 (JDBCドライバも)
アプリケーションのクラスパスにdbfluteランタイム(JAR)を追加して下さい。
2. dbflute Maven Plugin のインストール
そして、pom.xml の plugins に、"dbflute Maven Plugin" を入れます。
- clientProject
- そのデータベース(スキーマ)を表現する名前 ※"スキーマ名そのまま" がオススメ
- packageBase
- 自動生成クラスのパッケージ ※"アプリのパッケージ.dbflute" がオススメ
e.g. プラグイン情報の追加 (実行のための基本的な設定) @pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project>
...
<build>
<plugins>
...
<plugin>
<groupId>org.dbflute</groupId>
<artifactId>dbflute-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<clientProject>xxxdb</clientProject>
<packageBase>com.xxx.dbflute</packageBase>
</configuration>
</plugin>
...
</plugins>
</build>
...
</project>
Github に pom.xml の example がありますので参考に。
3. dbfluteエンジンのダウンロード
コマンドラインで dbflute:download ゴールを叩きます。
e.g. dbflute:download ゴールを叩く! @Command
...$ mvn -e dbflute:download
すると、mydbflute配下に、dbfluteエンジンがダウンロードされます。 こちらは、この後に作成するdbfluteクライアントから参照されるだけで、基本的にさわることはありません。 (mydbflute配下を見るのは、dbfluteエンジンのバージョンを確認するときくらい)
e.g. mydbfluteにdbfluteエンジン(1.1.0)がダウンロードされる @Directory
[PROJECT_ROOT]
|-src/main/java
|-src/main/resources
|-...
|-mydbflute
|-dbflute-1.2.5 // これをdbfluteエンジンと呼ぶ
|-ant
|-...
|-templates
|-build-torque.xml
|-product-is-dbflute-1.2.5
4. dbfluteクライアントの作成
コマンドラインで dbflute:create-client ゴールを叩きます。
e.g. dbflute:create-client ゴールを叩く! @Command
...$ mvn -e dbflute:create-client
すると、dbflute_xxxdb というディレクトリが作成されます。これを "dbfluteクライアント" と呼び、dbfluteをアプリに合わせるための設定や、dbflute実行するためのスクリプトがあり、何かと見たりさわったりする機会の多いところです。
e.g. dbfluteクライアントが作成される @Directory
[PROJECT_ROOT]
|-src/main/java
|-...
|-dbflute_xxxdb // ここをdbfluteクライアントと呼ぶ
|-dfprop // dbfluteプロパティ(dfprop)がたくさん置いてあるディレクトリ
|-...
|-mydbflute
|-dbflute-1.2.5 // こちらはdbfluteエンジンと呼ぶ
5. dbfluteプロパティの基本設定 (DB接続情報やDIコンテナなど)
まずは、dbfluteクライアント (dbflute_xxxdb) の dfprop 配下にある、ふたつの dfprop ファイルを修正しましょう。 (dfpropファイルの設定を "dbfluteプロパティ" と呼びます)
- basicInfoMap.dfprop
- database と targetContainer をアプリに合わせる
- databaseInfoMap.dfprop
- driver や url などのDB接続情報をアプリに合わせる
basicInfoMap.dfprop にて、データベース(DBMS)とDIコンテナをアプリで利用するものに修正します。以下は MySQL と Spring の例。
e.g. basicInfoMap.dfprop で、MySQL と Spring を指定 @basicInfoMap.dfprop
...
# /- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# o database: (Required)
# This is the target database, only considered when generating
# the SQL for your dbflute project.
# Your possible choices are:
#
# mysql, postgresql, oracle, db2, sqlserver,
# h2, derby, (sqlite, firebird, msaccess)
#
; database = mysql
# - - - - - - - - - -/
...
# /- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# o targetContainer: (Required)
# The target DI container.
# If your target language is 'csharp', you can specify 'seasar' only.
# Your possible choices are:
#
# spring, guice, seasar, cdi
#
; targetContainer = spring
# - - - - - - - - - -/
...
databaseInfoMap.dfprop は、dbfluteクライアント作成直後はデフォルト設定なので、 アプリで利用するDMBSのJDBCの設定に修正します。以下は MySQL の例。
e.g. databaseInfoMap.dfprop で、MySQLのJDBC設定 @basicInfoMap.dfprop
...
map:{
; driver = com.mysql.jdbc.Driver
; url = jdbc:mysql://localhost:3306/xxxdb?characterEncoding=UTF-8
; schema =
; user = xxxdb
; password = xxxdb
...
}
DBMSごとのDB接続情報は、"DBMSごとの取扱い" のページを参考に。
dfpropは、テキストエディタで開くことができます。もし、Eclipse環境が整っているなら、dbflute の Eclipse プラグインである "EMecha" で dfprop を開けば、dfpropの色付けや重複キーや閉じ括弧チェックがされて編集しやすくなります。
6. 特定環境適用プロパティ
ここからは、dbflute Maven Plugin に関係なく、どのセットアップ方法でも必要な手順です。
dfpropは、実際に使い始めてからつどつど微調整していく形でOKですが、 さすがに自動生成前にやっておいたほうがいいだろう "特定環境適用プロパティ" もあるので、そちらのページをサッと目を通して必要であれば直しておきましょう。
7. JDBCドライバの準備 (Oracle や DB2 などであれば)
dbfluteエンジンに同梱されていない DBMS (Oracle や DB2 など) であれば、JDBCドライバをダウンロードしてdbfluteクライアントの extlib に配置する必要があります。
H2, MySQL, PostgreSQL は同梱されているので、この手順はスキップしてOKです。
8. クラスの自動生成
それでは、自動生成 (ReplaceSchema & Generate) をしてみましょう。
dbfluteタスク実行時に、 java.lang.UnsupportedClassVersionError, Unsupported major.minor version 52.0 のエラーが発生したときは、JAVA_HOME の設定を確認してみましょう。
9. DI設定の調整
アプリケーションで利用しているDIコンテナの環境にdbfluteのクラスを認識させて下さい。
10. その後の設定
ひとまず、アプリケーション上でdbfluteのクラスを利用することができるようになりました。 しかし、ディベロッパーに横展開するまでには、まだあともうちょい頑張りが必要です。 より良い環境で実装してもらうために、現場フィットな機能を整えましょう!
UnsupportedClassVersionErrorが発生したら
ReplaceSchema や Regenerate などのdbfluteタスク実行時に、UnsupportedClassVersionError, Unsupported major.minor version 52.0 のエラーが発生した場合は、環境変数の JAVA_HOME の設定が、Java8 ではなく Java6,7 になっている可能性があります。 (もしかしたら、JAVA_HOMEが設定されていないときでも発生するかもしれません)
JAVA_HOME を JDK8 に合わせて試してみましょう。
とりあえず、そのセッションだけ JAVA_HOME を設定して動かすのであれば、その場で export JAVA_HOME を実行するだけです。
e.g. Macで一時的に JAVA_HOME を設定 @.bash_profile
...$ export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
固定的に JAVA_HOME を設定するのであれば、.bash_profileに設定するとよいでしょう。
e.g. Macで .bash_profile に JAVA_HOME を設定 @.bash_profile
#!/bin/bash
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
...
ちょっとずつこういった問題はなくなっていくと思いますが、Java6,7,8 と環境が混じる時期では、まだ少し注意が必要です。
dbfluteの方で、JAVA_HOMEが設定されるようにしてもいいかもしれません。dbfluteクライアントの _project.sh にて、Macだったときにだけ JAVA_HOME が設定されるように。 (ただ、すべての人の環境でちゃんと動くかどうかは不明です...でも、dbfluteの幾つかのExampleでは入れてしまっています)
e.g. _project.sh Macで .bash_profile に JAVA_HOME を設定 @.bash_profile
#!/bin/bash
export ANT_OPTS=-Xmx512m
export dbflute_HOME=../mydbflute/dbflute-1.x
export MY_PROPERTIES_PATH=build.properties
if [ `uname` = "Darwin" ]; then
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
fi