プロジェクト

全般

プロフィール

バグ #4212

Java版のStart RTC daemon(windows)が動作しない

katami が6年以上前に追加. 6年以上前に更新.

ステータス:
担当
優先度:
通常
担当者:
katami
対象バージョン:
開始日:
2017/10/04
期日:
進捗率:

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必要のため、この不具合と何か関係があるかもしれない。要調査。


関連するチケット

関連している OpenRTM-aist (Java) - 整備 #4272: rtcprof_javaをexe化する新規2017-10-18

履歴

#1 katami が6年以上前に更新

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)が必要になります。

#2 katami が6年以上前に更新

  • ステータス新規 から 担当 に変更
  • 担当者katami にセット
  • 対象バージョンRELEASE_1_2_0 にセット
  • 進捗率0 から 50 に変更

#3 katami が6年以上前に更新

  • 関連している 整備 #4272: rtcprof_javaをexe化する を追加

#4 katami が6年以上前に更新

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* に配下に格納。

#5 katami が6年以上前に更新

  • 進捗率50 から 100 に変更

他の形式にエクスポート: Atom PDF