この前まで動いていたデータローダバッチが起動しない!
という事象が起きました。なんとか自力で解決したのですが、備忘録として解決までのプロセスを書き留めておこうと思います。同じ事象に悩んでいて解決の糸口を探している人に対して始めに言っておくとするならば、環境変数を見直した方が良いです。
ちなみに使用PCはWindows10です。
はじまり
この前まで動いていたデータローダバッチが起動しない。コマンドプロンプトが一瞬で閉じてしまい、successログもerrorログも吐かれない。
ちなみにデータローダをexeから起動すれば、普通に使える。
2つのバージョンのデータローダが共存。片方を削除→ダメ
思い当たるのが、先日最新バージョンのデータローダをPCに入れたということ(その時の最新バージョンが46)。動かなくなったデータローダバッチはバージョン43で動作推奨のため、今はVersion.43とVersion.46、2つのバージョンのデータローダが1つのPCに共存している状態ということです。
その最新のデータローダ(Version.46)をインストールした際、今まではJavaが入っていれば良かったのですが、何やらzuluを入れろとのことで、とりあえずzuluを入れました。この辺が原因ではなかろうか。
ということで、Version.46のデータローダを削除。その時インストールしたzuluも削除。
これで、現在PCにはVersion.43のみが入っている状態。これで動いてほしいな~とデータローダバッチを起動すると・・・ダメでした。事象が変わらず。
ちなみにVersion.43の再インストールや再起動をしてみてもダメでした。
コマンドプロンプトで直接processを叩いてみる→一歩前進
今回起動しなくなったデータローダバッチは他人が作ったもの。自分でデータローダバッチ作ったことないんですよね・・・出来れば再インストールや再起動で解決したかったのですが、ここまできたら腹をくくってデータローダバッチの仕組みを理解しつつ解決の糸口を探すことに。
で、データローダバッチはコマンドプロンプトからデータローダのインストール先フォルダ/bin/process.batにパラメータを渡して叩いているということが分かりました。
じゃあコマンドプロンプトから直接叩いてみればエラーログが見れるかな、ということで直接叩いてみると・・・
We couldn’t find the Java Runtime Environment (JRE) in directory “C:\Program Files\Zulu\zulu-11\bin”. To run process.bat, set the JAVA_HOME environment variable to the directory where the JRE is installed. |
Zuluのインストール先フォルダにJREが無い・・・?
だって、さっき消したもん。
あれかな、JAVA_HOMEの設定かな?ということで環境変数のJAVA_HOMEを見てみると、仰る通りZuluのbinフォルダを指してました。最新のデータローダ(Version.46)を入れた時も、なんだかうまくいかなくて環境変数をいじっていたような・・・
JAVA_HOMEを変えてみる→OK
ということで、データローダVersion.43を動かすために必要なJava1.8をJAVA_HOMEに設定。
C:\Program Files (x86)\Java\jre1.8.0_211\bin |
↑これは私の環境のJavaインストール先binフォルダです。これで解決!と思ったらデータローダバッチがまだ起動しない。コマンドプロンプトで直接prcess.batを叩いてみると・・・
指定されたパスが見つかりません |
むむ、悪化しているような・・・。こんなエラー吐かれるとどこに問題があるか分かりません。なので、process.batの中にechoやpauseを貼りまくって原因の箇所を特定していくと・・
C:\Program Files (x86)\Java\jre1.8.0_211\bin\bin\java -cp 指定されたパスが見つかりません |
うわ~マジか~、JAVA_HOMEってbinフォルダ含めなくていいのか~。そーだよなー、そんな気もする。最近Java触ってないから忘れてしまってました。←最近こればっかり。。。
ということでJAVA_HOMEを下記のように書き換えたところ、無事データローダバッチを起動させることができました。
C:\Program Files (x86)\Java\jre1.8.0_211 |
結論
データローダバッチはJAVA_HOMEの設定が重要
ところで今回はJAVA_HOMEをVersion.43で使う設定に寄せましたが、Version.46で使う場合はまた変えないといけないですよね。1つのPCに複数のデータローダを共存させることはできますが、データローダバッチを使う場合は注意が必要そうです。ただデータローダのインストール先フォルダにあるprocess.batは編集できるので、JAVA_HOMEではなくて他の環境変数を参照するようにしてしまうとか、またはパスをベタ書きしてしてしまうとかすれば、イケるっちゃイケますが。
いずれにせよ、データローダはローカル環境に依存するのでナイーブですね。スクラッチ開発をやっていた頃は当たり前の話なのですが、SalesforceのPaaS開発に慣れるとこういうのは非常に煩わしく感じます。それだけクラウド環境での開発が如何に効率的か改めて感じますね。
追記
ちなみにこの話をSF上級者に話したところ、CLiqというツールを使えばデータローダバッチにJavaも内包させることが出来るそうで、そうすれば今回のような問題を気にすることはないですね!
今度やってみようと思います。
コメント