[英]How to call public static String method from jar from command-line?
我們有一個項目(比方說, Foo )有一些public static
方法,其中一些返回String
。 現在,我需要從命令行訪問該項目的jar
並調用其中一個public static String
方法來獲取該String。
編輯1:
我需要將返回的字符串作為參數傳遞給shell腳本。 像這樣的東西:
./my_bash_script.sh <value returned from jar> <more arguments>
我們該怎么做呢?
試圖從命令行調用jar,但這沒有幫助。
java -cp Foo.jar full.package.name.ClassName
Error: Could not find or load main class jar
這是預期的,因為該課程沒有主要功能。
還試圖在Foo.jar周圍添加一個包裝器。 比如,將這個jar(Foo.jar)作為依賴項添加到我的其他項目中,並從Foo.jar
調用public static String
方法。 嗯,這有效,但我必須在Java應用程序外返回一個String,而Main必須是void
。
有人可以幫我這個嗎?
如果我在投票前遺漏了任何細節,請詢問更多解釋。
您只需要創建一個main方法,將命令行參數傳遞給該方法,然后執行System.out.println(result)
。
更通用的解決方案需要一個使用反射來調用正確方法並打印出結果的包裝器。
你可以通過以下方式做到這一點:
public class InvokeMethod {
public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
String clazz = args[0];
String method = args[1];
String[] methodArgs = new String[args.length - 2];
Class<?>[] methodParam = new Class[args.length - 2];
for (int i = 2; i<args.length; i++) {
methodArgs[i-2] = args[i];
methodParam[i-2] = String.class;
}
Class<?> c = Class.forName(clazz);
Method m = c.getMethod(method, methodParam);
String result = (String) m.invoke(methodParam);
System.out.println(result);
}
}
編譯並將其打包到invoke.jar然后你就可以執行java -cp invoke.jar:your_real_jar.jar InvokeMethod some.class.Here method_name arg1 arg2 arg3...
最簡單的解決方案是:創建和編譯一個新的Java控制台應用程序作為JAR,包括你的其他JAR和
System.out.println
它的輸出,很容易像蛋糕。 之后,您可以開始使用新的JAR
java -jar FILE.jar
並按照您需要的方式輸出
您可以將包裝器的輸出傳遞給shell腳本。
Java的
// -- Test.java ----
public class Test
{
public static void main(String args[])
{
// Call the method from Foo.jar here
System.out.println("Hello" + " World");
}
}
貝殼
# ----- test.sh ------
#!/bin/sh
grep "$1" input.txt
input.txt中
# Sample Input
Line 1 : Hello World
Line 2 : Here is Hello World Again
Line 3 : This is not Hello + World
Line 4 : AB Hello World CD
命令
javac Test.java
./test.sh "`java Test`" # Note the `
樣本o / p
Line 1 : Hello World
Line 2 : Here is Hello World Again
Line 4 : AB Hello World CD
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.