[英]How to execute main method of a Runnable JAR from a different Java code?
我有一個test.jar
。 這個jar
只有一類。 它所做的就是刪除文件夾
import java.io.File;
public class Test {
public static void main(String[] args) {
File fileTest = new File("C:\\Users\\...\\test");
fileTest.delete();
}
}
我需要從其他Java應用程序執行此外部test.jar
這是我嘗試過的
ClassLoader pluginLoader = new PluginClassLoader(new URL("file:\\\\C:\\Users\\ . . .\\test.jar"));
Class<?> pluginClass = pluginLoader.loadClass("Test");
Plugin plugin = (Plugin) pluginClass.newInstance();
pluginClass.getMethod("main"); // trying to get main method but it throw no such method exception
實現插件體系結構的正確方法是使用ServiceLoader類。 但是您的情況似乎要簡單得多,因為您的Test
類只有一個靜態方法。
首先, Test
類的main
方法是static
。 這意味着不需要創建任何實例來調用它,因此您應該刪除對pluginClass.newInstance()
的調用。
其次,Java的方法由其簽名定義。 簽名通過方法名稱和方法參數的類型進行標識。 沒有帶main()
簽名的方法,但是有帶main(String[])
簽名的方法。
您需要指定所請求方法的完整簽名:
pluginClass.getMethod("main", String[].class);
最后,您可以調用它:
Method main = pluginClass.getMethod("main", String[].class);
main.invoke(null, new Object[] { new String[0] });
main.invoke
的第一個參數為null,因為它是static
方法,並且不需要特定的實例。
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("java -jar test.jar");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.