This is a cache of http://dbflute.seasar.org/ja/environment/upgrade/migration/theme/migrateshelljava.html. It is a snapshot of the page at 2025-08-02T00:22:22.817+0000.
移行 _project.shの<strong>java</strong>_HOME | DBFlute

移行 _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です。ベストプラクティスは現場次第です。