从Shell脚本调用Java方法
如何从内部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!");
main
方法。设计main
方法,使其调用所需的方法
当我说callmain
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)