簡體   English   中英

依賴外部庫調用Java程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM