[英]Calling java program dependent on external library
我正在嘗試在php中調用Java程序以將其與網絡界面一起使用。
Java程序依賴於外部庫:commons-cli-1.2.jar
因此,基本上我需要在調用Java程序之前將其導出; 但如果我先將其導出為:
shell_exec('export CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar');
然后將Java程序調用為:
shell_exec('java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o');
我認為它為每個調用創建不同的外殼; 那么導出對Java程序沒有任何影響。 還是我錯了?
否則,它將在服務器中輸出文件。 但事實並非如此。 那么,怎么了? 任何想法?
編輯:但是這可能是因為諸如para_i之類的某些參數代表輸入文件名,所以我必須為此指定完整路徑嗎? 因為我只是假設輸入文件在同一工作目錄中,所以不會有任何問題,對嗎?
編輯2:當我使用命令行時,它會正確輸出;)
沒錯,每個shell_exec都會創建一個單獨的shell。
env CLASSPATH=whatever java -switches
您應該可以這樣稱呼它。
shell_exec('java -cp $CLASSPATH:~/lib/commons-cli-1.2.jar ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');
另一個選擇是分別發出2條命令,但要在同一shell上,如下所示:
shell_exec('export CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar; java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');
編輯:在設置變量時,某些shell不允許您調用export。 因此,這可能比上面的第二種方法更安全:
shell_exec('CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar; export CLASSPATH; java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');
另一個編輯:如果以上都不起作用,那么您將不得不解決一些其他的麻煩。 您的Java程序可以在命令提示符下工作嗎?
java -cp $CLASSPATH:/home/user/lib/commons-cli-1.2.jar ComputePagerank -i param1 -d param2 -e param3 -o param4 > message
我會用
shell_exec('java -cp $CLASSPATH:/home/yourname/dir/lib/commons-cli-1.2.jar ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');
並且(這很重要)將波浪號(〜)替換為目錄的實際路徑( /home/yourname
)。 〜由外殼擴展,並且取決於您使用的外殼。
嘗試使用要執行的命令創建一個簡單的Shell腳本。 您可以將參數傳遞給Shell腳本,因此也不是問題。
例如
echo "Running Script..."
java -cp $CLASSPATH:~/lib/commons-cli-1.2.jar ComputePagerank -i $1 -d $2 -e $3 -o $4 > message
等等
然后嘗試首先使用某些參數從命令行調用它。 它輸出了嗎? 然后嘗試從php腳本調用它。 它輸出了嗎? 如果沒有,則可能需要檢查權限。 前段時間我對Java程序有類似的體驗,而Java程序根本沒有寫文件的權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.