Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Shell脚本调用Java方法_Java_Shell - Fatal编程技术网

从Shell脚本调用Java方法

从Shell脚本调用Java方法,java,shell,Java,Shell,如何从内部shell脚本执行Java方法?您只能调用main方法。设计main方法,使其调用所需的方法 当我说callmainmethod时,您并没有显式地调用它。当您调用java程序时,它是java程序的唯一入口点 如果您的类看起来像: package com.foo; public class Test { public static void main(String[] args) { System.out.println("Hello World!");

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

您只能调用
main
方法。设计
main
方法,使其调用所需的方法

当我说call
main
method时,您并没有显式地调用它。当您调用java程序时,它是java程序的唯一入口点

如果您的类看起来像:

package com.foo;

public class Test {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
您可以使用以下命令行从目录中调用
com/foo/Test.class
(如果您在下面所示结构的
classes
目录中):

如果您想从另一个目录(见下面的目录结构)执行此操作,则必须设置classpath

java -cp /path/to/classes com.foo.Test
为清晰起见,假设以下目录结构

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

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

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

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


不过,
bash
(或同等版本)最终不理解JVM字节码。将需要启动一个Java进程来运行该方法,这将涉及执行一些
main
方法,该方法反过来调用您所需的内容。

您可以使用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`

试试bashj(一种支持java的bash变体)。它旨在满足您的需求(以及更多):

例如:

#!/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)
#/usr/bin/bashj
#@爪哇
公共静态整数阶乘(整数n)

{如果(不,顺便问一下,你们中有谁知道一个整洁的在线服务,我可以快速装配目录结构(文本格式)像上面这样吗?这并不能回答问题。亲爱的马克,我为提出的问题提出了一个好的解决方案的完整路径。代码会占用很多空间,但我没有。因此我肯定认为它是一个有效的答案-比其他说没有答案的人更有效。
#!/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)