複数のJavaコマンドラインプログラムをインストールする方法は?

複数のJavaコマンドラインプログラムをインストールする方法は?

すべてのユーザーにインストールしたいJavaコマンドラインプログラムがたくさんあります。

/distNetBeansを使用してビルドすると、必要なすべてのライブラリを含むディレクトリが作成されますmyprog1.jar/libsそれを実行する一般的な方法はそこに行くjava -jar my.jar -options

だから私がやりたいことはmyprog1 -optionsどこでも入力して実行することです。

私が考えた方法は次のとおりです。

  1. とを /opt/myjava/myprog1含む生成。myprog1.jar/libs
  2. すべてのコマンドライン引数を単純にリダイレクトするmyprog1bashスクリプトを作成します。/usr/local/binjava -jar /opt/myjava/myprog1/myprog1.jar

私はbashスクリプトがあまり好きではありません...これが合理的なアプローチであれば、各プログラムに可変数とパラメータの順序があることを考えると、スクリプトはどのように見えますか?スクリプトは、出力リダイレクトや>パイプなどの標準のUnixビットについても心配する必要がありますか|

答え1

BashとJavaの実行可能ファイルは、リダイレクトされたコンテンツを処理する方法を知っています。execシェルスクリプトを実行する代わりに、スクリプトソルバーを使用しようとしています。

#!/bin/bash
exec java -jar ....jar "$@"

答え2

呼び出された方法で名前付きjarを実行し、各jarのシンボリックリンクを生成するラッパースクリプトを作成できます。以下はjar-wrapperスクリプトです(警告、ブラウザに直接入力)。

#!/bin/sh
name=$(basename "$0")
jar=
for dir in /opt/myjava/*; do
  if [ -e "$dir/$name.jar" ]; then jar=$dir/$name.jar; break; fi
done
if [ -z "$jar" ]; then
  echo 1>&2 "$name.jar not found"
  exit 126
fi
exec /your/favorite/java -jar "$jar" "$@"

$PATH次に、必要に応じてラッパースクリプトへのシンボリックリンクを作成し、次の場所に配置します。

ln -s wrapper-script myprog1
ln -s wrapper-script myprog2

Linuxを実行していてシステム管理者の場合は、Javaインタプリタを選択してjarを直接実行可能にすることができます。binfmt_misc器具。

たとえば、私のシステムでは次のようになります。

$ cat /proc/sys/fs/binfmt_misc/jar
enabled
interpreter /usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/jexec
flags: 
offset 0
magic 504b0304

システムは次のように記録されます。Documentation/binfmt_misc.txtLinuxカーネルのドキュメントにあります。上記のようなアイテムを作成するには、次のコマンドを実行します。

jexec=/usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/jexec
echo >/proc/sys/fs/binfmt_misc/register ":jar:M:0:504b0304::$jexec:"

ディストリビューションには、起動時にbinfmtを登録するメカニズムがあります。 Debian とその派生物では次のようになります。update-binfmts、JVMパッケージが登録されましたjexec

オプションを渡す必要がある場合は、オプションを直接追加するのではなく、ラッパースクリプトを登録してオプションを追加してくださいjexec

関連情報