移行 _project.shのJAVA_HOME
DBFluteクライアントのメンテ?
DBFluteランタイムやDBFluteエンジンはアップグレードされても、DBFluteクライアントはアップグレードされません。 アプリの情報を保存しておく場所なので、基本的にはそれで問題ありません。
ただ、何年も続くプロジェクトだと大昔のDBFluteで作ったDBFluteクライアントが時々ギャップになることもあるかもしれないので、その代表的な例を一つお話します。
(最新のDBFluteにアップグレードしたときに、DBFluteクライアントの最新テンプレートとアプリのものを比べる習慣があると理想ではあります)
そもそも _project.shとは?
MacやLinuxなどシェルベースのOSにて manage.sh を実行する時に、真っ先に呼び出されるファイルです。 DBFluteタスクをシェルから実行する上で必要な設定がされます。
e.g. _project.sh @Shell
#!/bin/bash
export ANT_OPTS=-Xmx512m
export DBFLUTE_HOME=../mydbflute/dbflute-1.2.6
export MY_PROPERTIES_PATH=build.properties
JAVA_VERSION=1.8+
# auto-setting for JAVA_HOME (keeping exiting JAVA_HOME)
if [[ -z "${JAVA_HOME}" ]]; then
if [[ `uname` = "Darwin" ]]; then
export JAVA_HOME=$(/usr/libexec/java_home -v ${JAVA_VERSION})
fi
fi
- Apache Ant のメモリ設定
- DBFluteエンジンの場所
- 内部propertiesの名前
- JAVA_HOMEの調整 (DBFluteエンジンが実行されるJavaのバージョンを決める)
内部的なものが多いですが、アプリ側で一番意識する可能性があるのは、JAVA_HOMEでしょう。
JAVA_HOME調整の移行
JAVA_HOMEの調整部分は、昔と変わっている部分があります。
昔の書き方
以前は、"MacだったらJava8を使う" になっていました。 (ただし、Java8がなければ無視されます)
e.g. 昔の_project.shのJAVA_HOME調整 @Shell
if [ `uname` = "Darwin" ]; then
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
fi
これは、開発者のPCにまだ Java6,7 が入ってることが多い時代、Java8版のDBFluteがJava6,7で実行されないようにするためのものでした。 Java6,7の時代は過ぎても、DBFluteをJava8で実行するのは一番マッチしているので、この処理はそのまま利用されていました。
ただ、今度はJava8が開発者のPCに入っていないケースも多くなってきました。PC上のJAVA_HOMEも開発プロジェクトに合わせた(より新しい)Javaが指定されていることも多くなりました。
ですが、昔の調整処理だと、PC上のJAVA_HOMEを無視してJava8を指定してしまいます。 Java8がたまたま入っている人はJava8で動き、そうでない人は別のJavaのバージョンで実行されます。
それでも、ほとんどの場合は問題ありませんが、時々実行するJavaのバージョンの違いで結果が変わってしまう可能性もあるので、それで不都合が生じることもあります。
今の書き方
いまは、"JAVA_HOMEが設定されてなくてMacだったらJava8以上を使う" になります。
e.g. 今の_project.shのJAVA_HOME調整 @Shell
JAVA_VERSION=1.8+
# auto-setting for JAVA_HOME (keeping exiting JAVA_HOME)
if [[ -z "${JAVA_HOME}" ]]; then
if [[ `uname` = "Darwin" ]]; then
export JAVA_HOME=$(/usr/libexec/java_home -v ${JAVA_VERSION})
fi
fi
つまり、すでにPCで既存のJAVA_HOMEが設定されていれば、それを優先するということです。
開発プロジェクトがJava8よりも新しいJavaバージョンを使っていて、開発者みんなでJAVA_HOMEを合わせているのであれば、こちらの調整の方がバージョン違い可能性は減ります。
ゆえに、もし既存のDBFluteクライアントの_project.shが、昔の書き方になっているのであれば、今の書き方も修正することを検討しても良いでしょう。
アプリ独自の書き方
開発者同士でPC上のJAVA_HOMEを統一してるわけではないけどJava8より新しいバージョンで統一したい...とかであれば逆に昔の書き方でJavaのバージョンだけ変えてベタッと強制させても良いでしょう。
e.g. アプリで独自に_project.shのJAVA_HOME調整 @Shell
if [ `uname` = "Darwin" ]; then
export JAVA_HOME=$(/usr/libexec/java_home -v 17)
fi
ただし、アプリのJavaのバージョンがアップされたときに、こちらも修正し忘れないようにしましょう。 (忘れても大抵は問題ないでしょうが、結局みんなでバージョンがバラバラになる可能性があります)
このように、開発現場の都合に合わせてうまくJAVA_HOMEを調整してもOKです。ベストプラクティスは現場次第です。