バグ #4212
未完了Java版のStart RTC daemon(windows)が動作しない
100%
説明
Windowsでrtcd_javaを実行すると以下のようなエラーが表示される
C:\Program Files\OpenRTM-aist\1.1.2\bin>rtcd_java.exe -d This program needs Java to run. Please download it at http://www.java.com
32ビット版のJava(jre)をインストールすると動作する。
rtcd_javaはJSmoothというツールを使用して、jarファイルをexeファイルに変換している。
JSmoothの動作環境として、32ビット版のJava必要のため、この不具合と何か関係があるかもしれない。要調査。
katami さんが約7年前に更新
rtcd_javaについて¶
ManagerのRTC生成機能において、OpenRTM-aist c++版だけがインストールされている環境でも、Java版のManagerがスレーブとして起動できる必要があります。
通常は、msi パッケージでインストールするとC++、python、java版の全てがインストールされますが、カスタムインストールでは、言語選択して単体のインストールが可能です。
rtcd_javaは、 OpenRTM-aist Java(OpenRTM-aist-x.x.x.jar)がなくても、Java版Managerがスレーブとして動作するものです。
また、rtcd_javaは、オプションまたはコンフィグファイルの指定で、マスターManagerとしての動作も可能です。
調査¶
JVMが見つからないために起動していないようです。
JSmoothの設定ファイル(rtcd.jsmooth.in)で<JVMSearchPath>タグによりJVMのサーチpathを設定います。以下抜粋。
<?xml version="1.0" encoding="ISO-8859-1"?>
<jsmoothproject>
<JVMSearchPath>registry</JVMSearchPath>
<JVMSearchPath>javahome</JVMSearchPath>
<JVMSearchPath>jrepath</JVMSearchPath>
<JVMSearchPath>jdkpath</JVMSearchPath>
<JVMSearchPath>exepath</JVMSearchPath>
<JVMSearchPath>jview</JVMSearchPath>
レジスト→JAVA_HOME→JRE_PATH→JDK_PATH→PATHの順でサーチしているようですが、環境を確認すると JAVA_HOME、JRE_PATH、JDK_PATHは、設定されていませんでした。テスト的にJAVA_HOMEを設定したらrtcd_javaは動作しました。
>set JAVA_HOME=C:\Program Files\Java\jre1.8.0_144 >rtcd_java -d
>set RTCTREE_NAMESERVERS=localhost >rtls localhost/.host_cxt -l - - - - - manager.mgr
実行パスは以下の通りです。(抜粋)
>echo %PATH% C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Parallels\Parallels Tools\Applications;C:\Windows\system32;・・・
javaの実行パスは C:\ProgramData\Oracle\Java\javapath; となっています。これだと実行しないようです。( bin ディレクトの配下に java.exe がある構成を想定しているのだと思います。)
対応¶
対応としては、以下のようなものが考えられます。
- JAVA_HOMEを設定する
この対応は、既にリリース済みの1.1.2で今回の不具合が発生した時の対応です。
環境変数にJAVA_HOMEを追加します。以下は例です。JAVA_HOME=C:\Program Files\Java\jre1.8.0_144
- jreを配布する
この対応は1.2.0の対応案です。(確認が必要です。)
インストーラでjreを配布して、rtcd_java.bat で JAVA_HOMEを設定する。以下は例です。set JAVA_HOME=..\jre @rtcd_java.exe -d
OpenRTM-aist Java版をコンパイルしたバージョンと同じjreを配布する必要があります。
- jre と OpenRTM-aist Java版 を配布する
この対応は1.2.0の対応案です。(確認が必要です。)
カススタムインストールでも jre と OpenRTM-aist Java版で必要なjarファイルをインストールする方法。(examplesはインストールしない。)
これにより、rtcd_javaをexe化する必要はなくなりますが、jarファイル分のディスク容量が消費されます。
Start RTC daemonの起動¶
Start RTC daemonは、以下の順で動作します。
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\OpenRTM-aist 1.1.2\Java\Tools\Start RTC daemon
↓
"C:\Program Files\OpenRTM-aist\1.1.2\bin\rtcd_java.bat" -d
↓
C:\Program Files\OpenRTM-aist\1.1.2\bin\rtcd_java.exe
- rtcd_java.bat
@rtcd_java.exe -d
rtcd.jarをexeファイル化(rtcd_java.exe)した理由¶
rtcd_java.bat(batファイル)からexeファイル(rtcd_java.exe)を呼び出すのではなく、以下のようにjavaを使用してrtcdを呼び出せば、rtcd_java.exeなしにManagerを実行することは可能ですが、この場合、OpenrRTM-aistを含むいくつかのJarファイルが必要になります。
set CLASSPATH=.;./rtcd.jar;./OpenRTM-aist-1.2.0.jar;./commons-cli-1.1.jar java rtcd.rtcd -d -f ./rtcd_java.conf
カスタムインストールでjava版がインストールされなかった場合は、これらのjarファイルはインストールされませんので、Managerは実行できなくなります。
そのため、必要なjarのパッケージが一つになったexeファイル(rtcd_java.exe)が必要になります。
katami さんが約7年前に更新
exe化をやめてbatファイルで対応¶
batファイルでrtcdを実行しても、dos窓が非表示のため、exe化をやめて、batファイルで配布。
- 環境変数 JAVA_HOME の設定が不要になる。
- マージモジュール作成時にjsmooth(jarをexe化するツール)を使わずに済む。
- rtcd_java.bat
@echo off call set_classpath.bat set CLASSPATH=%CLASSPATH%;%RTM_JAVA_ROOT%\jar\rtcd.jar; java rtcd.rtcd %*
- rtcd_java.bat、rtcprof_java.batは、%RTM_ROOT%\bin\vc* に配下に格納。