从Shell脚本调用Java方法

时间:2012-02-23 11:18:15

标签: java shell

如何从shell脚本中执行Java方法?

4 个答案:

答案 0 :(得分:12)

您只能调用main方法。设计您的main方法,使其调用您想要的方法。

当我说调用 main方法时,您不会显式调用它。它是调用java程序时唯一的入口点。

如果您的班级如下:

package com.foo;

public class Test {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

您可以使用以下命令行从您可以找到main的目录中调用com/foo/Test.class(如果您位于下面显示的结构中的classes目录中):

java com.foo.Test

如果你想从另一个(见下面的目录结构)目录中这样做,那么你将不得不设置类路径。

java -cp /path/to/classes com.foo.Test

为清楚起见,假设以下目录结构。

-path
    -to
        -classes
            -com
                -foo
                    >Test.class

答案 1 :(得分:2)

您不能直接从shell脚本执行任意方法,您需要以某种方式将该方法暴露在外部。

最简单的方法当然是编写一个直接调用您要测试的代码的main方法。

或者,您可以使用Java参数,该参数将参数作为一种启动器。在最粗略的形式中,您可以想象一个应用程序,它将类名和方法名称作为参数,然后实例化该类并通过反射调用该方法。类似地,但更优雅,我们使用一个应用程序调用通过JMX公开的操作,以便在需要时在服务器上触发某些方法。

最终,bash(或等效的)不理解JVM字节码。您需要启动Java进程来运行该方法,这将涉及执行某些 main方法,而该方法又会调用您需要的方法。

答案 2 :(得分:0)

你可以使用shell脚本并像这样调用你的java程序:

`#!/bin/bash 
JAVA_HOME=/usr/lib/jvm/jdk1.6.0_02 
CLASSPATH=/home/freddy/myapp/lib/whatever.jar: . 
$JAVA_HOME/bin/java -cp $CLASSPATH MyJavaClass 
exit 0`

答案 3 :(得分:-1)

尝试 bashj (支持java的bash变种)https://sourceforge.net/projects/bashj/。它旨在满足您的需求(以及更多):

例如:

#!/usr/bin/bashj
echo Math.cos(0.5)
echo Math.hypot(3.0,4.0)
echo System.getProperty("java.runtime.version")

您也可以将自己的方法放在bashj加载的jar中,或者在bashj脚本中包含一些java源代码:

#!/usr/bin/bashj
#@java
public static int factorial(int n) 
{if (n<=0) return(0);
 if (n==1) return(1);
 return(n*factorial(n-1));}
#@bash
echo j.factorial(10)