簡體   English   中英

如何從不同的Java代碼執行可運行JAR的主要方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM