如何从Java程序中运行本地Jar文件?
该Jar文件不在Java调用程序的类路径中。
我建议您使用ProcessBuilder
启动一个新的JVM。
这里有一些初始代码:
ProcessBuilder pb = new ProcessBuilder("/path/to/java", "-jar", "your.jar");
pb.directory(new File("preferred/working/directory"));
Process p = pb.start();
Process proc = Runtime.getRuntime().exec("java -jar Validate.jar");
proc.waitFor();
// Then retreive the process output
InputStream in = proc.getInputStream();
InputStream err = proc.getErrorStream();
byte b[]=new byte[in.available()];
in.read(b,0,b.length);
System.out.println(new String(b));
byte c[]=new byte[err.available()];
err.read(c,0,c.length);
System.out.println(new String(c));
首先,你提出的问题描述不太清楚。我不知道你是想要加载 jar 文件中的类来在应用程序中使用,还是该 jar 包含一个你想要运行的主文件。我假设它是后者。
如果是这样,你有很多选择。
其中最简单的一个如下:
String filePath; //where your jar is located.
Runtime.exec(" java -jar " + filepath);
看这里... 如果你不需要运行jar文件,而是要从中加载类,请告诉我。
ProcessBuilder
相同(除非您想要关闭等),并且您需要输入更少的内容。在我的情况下,我需要一个启动器,在打开一个jar文件后自动关闭,所以这对我来说已经足够了。 - user5066707Runtime.getRuntime().exec("cmd /c start jarFile");
这样你就可以设置进程的优先级(普通/低等)
Invoke static method main with arguments
String args[] = {"-emaple","value"};
PortMapperStarter.main(args);
这是我的方法,我认为更加完整:
public static Process exec(String path, String filename) throws IOException {
String javaHome = System.getProperty("java.home");
String javaBin = javaHome +
File.separator + "bin" +
File.separator + "java";
ProcessBuilder pb = new ProcessBuilder(javaBin, "-jar", path+filename);
return pb.start();
}
您可以使用以下一行代码从任何位置运行jar文件。
Desktop.getDesktop().open(new File("D:/FormsDesktop.jar"));
where
new File("your path to jar")
谢谢。
要从Java应用程序内部运行可执行的jar文件,您可以从https://docs.oracle.com/javase/tutorial/deployment/jar/examples/JarClassLoader.java复制JarClassLoader
。
使用方法如下。在此片段中,jarUrl
是下载jar文件的URL,例如file:/tmp/my-jar.jar,而args是要作为命令行参数传递给jar文件的字符串数组。
JarClassLoader loader = new JarClassLoader(jarUrl);
String main = loader.getMainClassName();
loader.invokeClass(main, args);
1)从环境变量设置类路径
2)进入您的jar文件所在的文件夹
3)通过命令提示符运行以下命令
java -jar jar文件名
start()
获得一个Process
,它提供了getInputStream
/getOutputStream
。 - aioobeProcessBuilder
构造函数添加更多的参数:new ProcessBuilder("/path/to/java", "-jar", "your.jar", "arg1", "arg2");
- aioobe