2012-05-17 125 views
0

我是Perl的新手,我試圖做一些事情,找不到答案。如何從Perl調用Java程序?

我創建了一個Java項目,其中包含一個獲取多個輸入參數的主類。

我想用Perl包裝我的Java:我想創建一個獲取輸入參數的Perl腳本,然後將它們傳遞給Java程序並運行它。

例如:

如果我的主被稱爲mymain,我這樣稱呼它:mymain 3 4 hi34hi的輸入參數),我想創建一個名爲myperl一個Perl程序,當它被調用爲myperl 3 4 hi將參數傳遞給Java程序並運行它。

我該怎麼做?

回答

1
$javaoutput = `java javaprogram`; 
or 
system "java javaprogram"; 

對於一個jar文件

$javaoutput = `java -jar filename.jar`; 
or 
system "java -jar filename.jar"; 
+0

感謝您的快速回復; –

+0

感謝您的快速回復,現在我/ m得到:錯誤:無法找到或加載主類dbtools.jar –

+0

我已經更新了jar文件的答案現在... – AurA

5

運行Java程序一樣運行的任何其他外部程序。

你的問題有兩個部分:

  1. 我如何從Perl的參數到Java程序?
  2. 如何在Perl中運行程序?

對於(1),你可以這樣做

my $javaArgs = " -cp /path/to/classpath -Xmx256"; 
my $className = myJavaMainClass; 
my $javaCmd = "java ". $javaArgs ." " . $className . " " . join(' ', @ARGV); 

通知的join()功能 - 它將把你所有的參數給Perl程序,並將它們與空格分隔。 (2)你可以關注@AurA的答案。

  • 使用system()功能

    my $ret = system("$javaCmd"); 
    

這不會捕捉(即放在變量$ret)你的命令的輸出,只是返回代碼,如0成功。

  • 使用反引號

    my $out = `$javaCmd`; 
    

這將填充$出與Java程序(你可能不希望這樣)的全輸出。

  • 使用管道

    open(FILE, "-|", "$javaCmd"); 
    my @out = <FILE> 
    

這是比較複雜的,但允許在輸出更多的操作。

欲瞭解更多關於這個信息,請參閱perldoc -f open

+0

在Windows機器上運行java調用perl腳本:process = r.exec(「cmd/c perl D:\\ perlexamples \\ hello.pl」); \ –