0

このサイト全体を検索し、このメッセージを受け取ったときにいくつかの解決策を試しましたが、何もうまくいかないようです。

Java プログラムを実行する Ubuntu 12.04.2 (java-7-openjdk-amd64 を使用) でシェル スクリプトを呼び出そうとすると、「エラー: メイン クラス com.xx が見つからないか、読み込めませんでした」というエラーが表示されます。

これは、私のスクリプトが Java を呼び出す方法です。

"$JAVA" $server_jvmargs $javaProps -Dxx.home="$XX_HOME" -Duser.dir="$XX_HOME" -cp $client_classpath $mainclass $args

上記の引数は次のように定義されています。

args=$*
javaProps=
mainclass=com.xx
server_jvmargs="-Djava.awt.headless=true -Xms1024m -Xmx1024m $jvmargs"
XX_HOME="`pwd`/../.."
client_classpath="$XX_HOME/lib/client/patch.jar;$XX_HOME/lib/client/xyx-xxx.jar;$clientlibs;$XX_HOME/lib/server/standard-1.1.2.jar;$publictilesource;$respath;$XX_HOME/lib/client/xxmainclass.jar"

mainclass 変数は xxmainclass.jar ファイルにあるクラスパスにあるので、なぜ見つからないのかわかりませんか?

何が起こっているのかについて何か考えがある人はいますか?

4

4 に答える 4

2

スクリプトを実行したときに実際に何が起こるかを確認するには、 で呼び出すか、先頭bash -xに置きます。これにより、実行前に各コマンドが出力されるため、実際に JVMがset -xどのように起動されているかを確認できます。この情報がなければ、より良い診断を下すことは困難です。それは言った...


Tomcat の起動スクリプトをコピーしているようです。しないでください。彼らはひどいです。

シェル側でもう少し正確なものは次のようになります。

args=( "$@" )
javaProps=( )
mainclass=com.xx
server_jvmargs=( -Djava.awt.headless=true -Xms1024m -Xmx1024m "${jvmargs[@]}" )
XX_HOME="$PWD/../.."
client_classpath="$XX_HOME/lib/client/patch.jar:$XX_HOME/lib/client/xyx-xxx.jar:$clientlibs:$XX_HOME/lib/server/standard-1.1.2.jar:$publictilesource:$respath:$XX_HOME/lib/client/xxmainclass.jar"

java \
  "${server_jvmargs[@]}" \
  "${javaProps[@]}" \
  -Dxx.home="$XX_HOME" \
  -Duser.dir="$XX_HOME" \
  -cp "$client_classpath" \
  "$mainclass" "${args[@]}"

を使用すると${foo[@]}、配列fooがリテラルの内容で展開されます。この場合、 は配列として作成するfoo必要があり、配列をサポートするシェルを使用する必要があることに注意してください (したがって、スクリプトはではなくで開始する必要があります)。#!/bin/bash#!/bin/sh

bash の配列の概要については、 http://mywiki.wooledge.org/BashFAQ/005を参照してください。

于 2013-06-17T05:05:29.063 に答える
0

シェル スクリプトで行末文字が OS 固有かどうかを確認してください

于 2015-02-17T08:44:18.513 に答える