如何从shell脚本中执行Java方法?
答案 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)